this.Controls返回null

时间:2013-11-19 14:07:47

标签: c# windows winforms forms

这里有类似的问题,但没有解决这个具体问题。我正在创建一个按钮对象来动态修改按钮上的图像。但是当我尝试在按钮上设置图像时,使用下面的代码,我得到“对象引用没有设置为对象的实例”。

Button button3;
button3 = (Button)this.Controls["btnDay" + ctrlsFwd.ToString("00")];
button3.Image = Resources.BookingAllDay;

任何帮助表示赞赏!轻松 - 这是我的第一篇文章: - )

**更新 - 有点像facepalm的时刻。按钮在面板中,所以我需要引用pnlCalendar.Controls而不是this.Controls。

2 个答案:

答案 0 :(得分:5)

这样做的一种方法是:

button3 = (Button)this.Controls
    .Find("btnDay" + ctrlsFwd.ToString("00"))
    .FirstOrDefault();

另一种方法是:

button3 = this.Controls.OfType<Button>()
    .Where(b => b.Name == "btnDay" + ctrlsFwd.ToString("00"))
    .FirstOrDefault();

正如Stefan所指出,请检查null

if (button3 == null) { return; }

因为可以发生。

答案 1 :(得分:1)

因此,button3 = (Button)this.Controls["btnDay" + ctrlsFwd.ToString("00")];是一种非常有效的访问控件的方法,并且不起作用,具有该名称的控件不存在,或者控件更可能位于容器内。无论哪种方式在this中搜索都无法找到它,无论您尝试找到多少种不同的方式。