C#禁用父表单中的列表框

时间:2010-12-14 13:45:28

标签: c# listbox

我有一个mdi子窗体作为我的应用程序中的可停靠内容,我想根据某个事件从父窗体中禁用/启用列表框。我认为这很简单:

_child.listBox1.Enabled = false;

但它似乎没有禁用它。 _child是mdi子窗体btw的对象引用。为什么它不起作用,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

_child可能指的是子表单的不同实例。

确保_child引用您呼叫Show()的同一个实例。

答案 1 :(得分:0)

你不能在你的MDI孩子上创建一个禁用列表框的功能,你可以从MDI父母那里调用吗?

我想这里listBox1是私有的(如果你使用VS设计器构建了你的表单,这是默认的)

答案 2 :(得分:0)

虽然它有效,但将表单控件暴露为公共财产被认为是一种糟糕的设计实践。

假设在将来的某个时刻,您必须将内部ListBox更改为其他类型,例如ListView,以便添加一些功能。

在这种情况下,如果您在表单上创建一个名为DisableList的方法,则只需更改代码中的一个位置,即可更新列表的禁用方式。

但是,如果您选择编写_client.listbox1.Enabled = false;等代码的方法,则必须浏览触及ListBox的所有代码,然后更新它们。

设计中一个非常重要的原则是避免将类的内部实现细节暴露给必须使用它的人。在这种情况下,如果父表单不必知道列表是以ListBox实现的,那么您将受益。