1

这对我来说有点难以描述,但是这个伪 C# 应该可以解释我想要做什么。

Windows 窗体上有大量标签。

我想更改其中一些标签的文本颜色。

private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i in lray)
    {
        label[i].Forecolor = Color.Black;
    }            
}

我希望这能解释我在这里想要做什么。

现在很明显,由于标签[i],它不会起作用,但我该如何解决这个问题?

4

9 回答 9

4

它可能不起作用,因为您的标签未保存在数组中。考虑到您知道要更改的标签的名称,以下代码将起作用:

Label[] lray = { labelOne, labelDifferent, labelWhatElse };
foreach (Label label in lray)
{
    label.ForeColor = Color.Black;
}            
于 2011-10-17T09:26:52.610 回答
1

如果您实际上有一组标签,那会很好用。

如果你只有很多变量,像这样:

private Label label1;
private Label label2;
private Label label3;
private Label label4;
private Label label5;

然后就更难了。选项:

  • 更改代码以改用数组。设计师没有那么好,但更合乎逻辑
  • Controls.Find与每个 ID 一起使用
  • 遍历Controls以查找所有 Label控件,无论名称如何
于 2011-10-17T09:25:15.743 回答
1
foreach (Control c in this.Controls)
{
    if (c is Label)
    {
        // do stuff
    }
}

这将获取表单的所有子控件(假设此代码在表单的代码隐藏中)并检查它们是否是标签。只需做任何你想要的操作来代替评论。

于 2011-10-17T09:25:16.227 回答
0

您可以自己创建数组。每次您的表单更改时,这都会涉及一些维护成本/风险。注意:您可能希望将数组创建位放在 Form Loaded 事件中,而不是在构造函数中,或者至少在InitializeComponent调用之后,以便设置您的控件。

或者,您可以迭代表单的所有子项(this.Controls来自 Form 方法),用特定标签标记标签,或者如果这是您的目的,则获取所有标签。

请注意,如果表单中有许多控件,则第一个解决方案在运行时性能方面可能要快得多。

于 2011-10-17T09:24:59.643 回答
0
private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i = 0; i < lray.Length; i++)
    {
        ((Label)this.Controls["label" + i]).ForeColor = Color.Black;
    }            
}
于 2011-10-17T09:25:35.003 回答
0

如果您想为表单上的所有标签实现这一点,那么这样的事情可能会有所帮助:

foreach (Control control in this.Controls) {
     if (control is Label) {
         (control as Label).Forecolor = Color.Black;
     }
}

但是,如果您只需要更改所有标签的子集,那么您需要存储需要更改的标签的名称或索引。这是因为this.Controls有两个索引器,一个 int32 和一个字符串。因此你可以尝试这样的事情

private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i in lray)
    {
         this.Controls[i].Forecolor = Color.Black;
    }            
}

值得注意的是,排序this.Controls很可能不像您的lray数组那样线性。希望这可以帮助

于 2011-10-17T09:29:24.217 回答
0

尝试这样的事情:

List<string> ListLabelNames = new List<string>() { /* Your label name list*/ };

foreach (Label TmpLabel in this.Controls.OfType<Label>())
{
    foreach (string strTmp in ListLabelNames)
    {
        if (String.Compare(TmpLabel.Name, strTmp, true) == 0)
            TmpLabel.ForeColor = System.Drawing.Color.Black;
    }
}

希望这可以帮助。

于 2011-10-17T09:29:41.040 回答
0

我注意到您在示例中从“lray”数组中排除了 4。如果您希望排除一个或多个标签不被代码自动更新(可能突出显示一组中的一个),试试这个。

    private void allBlackLabels()
    {    
        foreach (Control control in this.Controls)            
        {
            if (control is Label && control.Name != "label4")
            {
                (control as Label).Forecolor = Color.Black;
            }
        }
    }
于 2014-12-23T05:52:40.837 回答
-1

在伪 C# 中:

List<String> controlsToChange =new List<String>{"lable1Name","lable2Name"};
foreach(Control control in form.Controls)
{
    if(control.GetType().Equals(typeof(Lable))
    {
         if( controlsToChange.Contains(control.Name)
         {
              control.Forecolor=Colour.Black;
         }
    }
}
于 2011-10-17T09:26:22.103 回答