1

我在form2上有两个表单(Form1,form2)这个代码......我在form1上创建了所有控件的循环并获取控件的名称(ControlName)我想将任何文本(例如“sherif”)发送到这个控件(案例按钮)

 foreach (Control ctrl in form1.Controls)
{
    form1.Controls[ControlName]).Text = "sherif";
}

出现错误信息 NullReferenceException 对象引用未设置为对象的实例。如果指针停在 [ControlName] 上面读取控件的名称,但是当 continue 时会出现 Null 值

4

4 回答 4

2

如果您只想更改Text表单中所有控件的属性,应该这样做:

foreach (Control ctrl in form1.Controls)
{
   ctrl.Text = "sherif";
}

请注意,这只会更改顶层的控件,而不是嵌套控件....

如果您也需要嵌套控件,请递归执行:

 public void RecursiveChange(Control control)       
 {

    foreach (Control ctrl in control.Controls)
    {
       RecursiveChange(ctrl);
       ctrl.Text = "sherif";
    }
 }
于 2013-02-05T12:50:28.040 回答
1

此方法递归返回所有表单控件:

public IEnumerable<Control> GetChildControls(Control parent)
{
    foreach(Control ctrl in parent.Controls)
    {
        yield return ctrl;

        if (ctrl.HasChildren)
            yield return GetChildControls(ctrl);
    }
}

更新文字:

foreach(var ctrl in GetChildControls(form1))
    ctrl.Text = "sherif";
于 2013-02-05T12:54:59.473 回答
0

您必须循环所有控件。其中一些可以在面板内。使用这种递归方法:

private void SetText(Control control, string text)       
{
     foreach (Control ctrl in control.Controls)
     {
         ctrl.Text = text;
         SetText(ctrl, text);
     }
}

用法:

SetText(form1,  "sherif");
于 2013-02-05T12:51:15.007 回答
-1

尝试这个

foreach (Control c in form1.Controls)
{

    if (c!= null)
    {
        c.text="Sherif";
    }
}
于 2013-02-05T12:50:49.770 回答