【问题标题】:Increment name of labels while in a loop [closed]在循环中增加标签名称[关闭]
【发布时间】:2020-07-11 12:05:48
【问题描述】:

仍然是编程的新手,但我正在开发一个小型日程应用程序,基本功能是:将数据网格中的条目拖到面板上,面板中嵌套的三个标签会更新相关文本, 查询数据库并保存表中正确的单元格。

我的大问题是从数据库中加载所有数据并在一个循环中干净地填充所有标签。我知道我需要从数据库中查询什么才能取回数据,但就在 UI 中呈现它而言,我希望能够像将循环的计数器与标签名称联系起来一样简单,但我我不知道如果那是一件事我怎么能做到这一点?例如:如果我所有的标签都命名为 panel1Title、panel2Title 等,我希望做这样的事情,其中​​标签的名称在我放置数字的地方递增,但它们与计数器一致递增:

while (X<=42)
{
panelXTitle.Text = "Title";
}

有可能做我想做的事吗?如果不是,我应该朝着哪个方向前进以达到相同的结果?

【问题讨论】:

  • 使用数组或字典。
  • 您的意思是将我从数据库中提取的数据存储在数组中,还是将标签/标签名称存储在数组中?
  • “如果不是,我应该朝着什么方向前进以达到同样的效果?”显然可以做到,但是您是否考虑过使用 DataGrid 而不是大量单独的标签?
  • 不,你不能这样做。您可以设置Name 属性,但不能设置变量名。后者必须是唯一的,前者不需要。这使得它们相当无用..
  • 您的目标是什么:Winforms、WPF、ASP..?您应该始终正确标记您的问题,以便人们可以在问题页面上看到它!

标签: c#


【解决方案1】:

你可以使用它(假设你有你写的标签而不是面板):

using System.Linq;

var labels = this.Controls.OfType<Label>();
int X = 0;
while ( X++ <= 42 )
{
  var label = labels.Where(p => p.Name == "panel" + X + "Title").FirstOrDefault();
  if (label != null) label.Text = "Title " + X;
}

我们在根级别获取表单的所有标签,但您可以使用任何容器代替this.ControlsSomePanel.Controls,例如(如果需要,您可以使用递归,见下文)。

接下来在循环中,我们更改匹配搜索条件的Text 属性。

您应该能够使用正则表达式和/或一些 Linq 方法进行优化以避免循环...

循环之前

循环之后

您还可以创建标签列表并对其进行解析,而不是每次都按名称搜索:

using System.Collections.Generic;

private Dictionary<int, Label> Labels = new Dictionary<int, Label>();

private void FormTest_Load(object sender, EventArgs e)
{
  var labels = this.Controls.OfType<Label>();
  int X = 0;
  while ( X++ <= 42 )
  {
    var label = labels.Where(p => p.Name == "panel" + X + "Title").FirstOrDefault();
    if ( label != null ) Labels.Add(X, label);
  }
}

private void ButtonAction_Click(object sender, EventArgs e)
{
  foreach ( var label in Labels )
  {
    if ( label.Key == 10 )
      label.Value.Text = "A special label";
    else
      label.Value.Text = "Text " + label.Key;
  }

  Labels[5].Text = "Modified text";
}

如果需要递归解析,可以看看:

How to format all textbox values on LostFocus event in Winform

Mouseover controls and display its handle

How to toggle visibility in Windows Forms C#

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多