如何从其他表单更改表单上的所有控件的文本

时间:2013-02-05 12:46:01

标签: c# winforms

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

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

错误消息 的NullReferenceException 你调用的对象是空的。 如果指针停在[ControlName]上方,则读取控件名称,但是在继续时 来一个空值

4 个答案:

答案 0 :(得分: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";
    }
 }

答案 1 :(得分: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";

答案 2 :(得分:0)

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

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

用法:

SetText(form1,  "sherif");

答案 3 :(得分:-1)

试试这个

foreach (Control c in form1.Controls)
{

    if (c!= null)
    {
        c.text="Sherif";
    }
}