我有两个表单(Form1,form2) form2上的这段代码...... 我在form1上创建所有控件的循环并获取控件的名称(ControlName) 我想将任何文本(例如“sherif”)发送到此控件(案例按钮)
foreach (Control ctrl in form1.Controls)
{
form1.Controls[ControlName]).Text = "sherif";
}
出现错误消息 的NullReferenceException 你调用的对象是空的。 如果指针停在[ControlName]上方,则读取控件名称,但是在继续时 来一个空值
答案 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";
}
}