我描述起来有点困难,但这个伪C#应该解释我正在尝试做什么。
Windows窗体上有大量标签。
我想更改其中一些标签的文字颜色。
private void allBlackLabels()
{
int[] lray = { 1, 2, 3, 5, 6 };
foreach (int i in lray)
{
label[i].Forecolor = Color.Black;
}
}
我希望这能解释我在这里要做的事情。
现在很明显,由于标签[i],它不会起作用,但我怎么能解决这个问题呢?
答案 0 :(得分:4)
它可能不起作用,因为您的标签不是保存在数组中。考虑到您知道要更改的标签的名称,以下代码将起作用:
Label[] lray = { labelOne, labelDifferent, labelWhatElse };
foreach (Label label in lray)
{
label.ForeColor = Color.Black;
}
答案 1 :(得分:1)
如果您实际拥有标签数组,那么这样可以正常工作。
如果你只有很多变量,比如:
private Label label1;
private Label label2;
private Label label3;
private Label label4;
private Label label5;
那么它就更难了。选项:
Controls.Find
Controls
以查找所有 Label
控件,无论名称是什么答案 2 :(得分:1)
foreach (Control c in this.Controls)
{
if (c is Label)
{
// do stuff
}
}
这将获取所有表单的子控件(如果此代码在表单的代码隐藏中),并检查它们是否是标签。只需做任何你想要的操作来代替评论。
答案 3 :(得分:0)
您可以自己创建阵列。每次表单更改时,这都会带来一些维护成本/风险。注意:您可能希望将数组创建位置于Form Loaded事件中,而不是构造函数,或者至少在InitializeComponent
调用之后,因此您的控件已设置好。
或者您可以通过Form方法迭代表单的所有子项(this.Controls
),使用特定标记标记您的标签,或者如果这是您的目的,则获取所有标签。
请注意,如果表单中有许多控件,第一个解决方案在运行时性能方面可能要快得多。
答案 4 :(得分: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;
}
}
答案 5 :(得分: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
数组一样。
希望这有帮助
答案 6 :(得分: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;
}
}
希望这有帮助。
答案 7 :(得分: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;
}
}
}
答案 8 :(得分:-1)
:
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;
}
}
}