C# 错误:尝试从Form.Controls集合获取控件时,对象引用为空
我正试图从C# 错误:尝试从Form.Controls集合获取控件时,对象引用为空,c#,.net,winforms,C#,.net,Winforms,我正试图从子表单更改父表单中的标签文本,但我得到的错误对象引用未设置为对象的实例。错误在哪里? 这是我正在使用的代码 private void btnMedicalClgList_Click(object sender, EventArgs e) { this.ParentForm.Controls["lblMenuItem"].Text = "Medical College List";//getting error here S
子表单更改父表单中的标签文本
,但我得到的错误对象引用未设置为对象的实例。
错误在哪里?
这是我正在使用的代码
private void btnMedicalClgList_Click(object sender, EventArgs e)
{
this.ParentForm.Controls["lblMenuItem"].Text = "Medical College List";//getting error here
ShowMedicalClgList medifrm = new ShowMedicalClgList();
medifrm.MdiParent = this.ParentForm;
this.Hide();
medifrm.Show();
}
正如我在评论中所说的,您不能使用控件的名称作为控件集合的索引器来获取它,但您可以在控件集合中进行迭代,找到所需的控件并对其执行任何操作,请尝试以下操作:
Label lbl = null;
foreach (var control in this.ParentForm.Controls)
{
if (((Control)control).Name == "lblMenuItem")
{
lbl = (Label)control;
break;
}
}
if (lbl != null)
lbl.Text = "Medical College List";
或者,如果您想编写更少的代码:
Control[] foundControls = this.Controls.Find("lblMenuItem", true);
if (foundControls.Any())
foundControls.First().Text = "Medical College List";
this.ParentForm.Controls[“lblMenuItem”]
可能是null引用异常的来源。@JeremiahDotNet当然不是来自字符串literalThis.ParentForm
为null或没有控件名lblMenuItem
。尝试调试。@Durga您需要逐步检查您的代码,并检查是否在ParentForm.Controls
中找到了lblMenuItem
是的可能重复项此操作如您所说,将this.Controls.Find
更改为this.ParentForm.Controls.Find
,在代码的第二部分中,对于第一个元素,两个控件都可以使用此foundControls.first().Text
第二个元素使用什么?我们正在搜索名为“lblMenuItem”的控件。表单上不能有多个具有此名称的控件,因此,如果没有多个控件,您将得到一个。