C#如何实现一个控件依赖于某些属性的表单?

时间:2011-03-01 09:22:47

标签: c# winforms

在我的应用程序中,仅使用不同的控件取决于特定对象的属性值。表单构造函数接受此对象作为参数。

无论特定对象设置了什么属性,表单总是有一些基本功能。

现在我有这样的事情:

if(myObject.SomeProperty)
{
  myControl.Visible = true;
  myOtherControl.Visible = false;
  // and so on
}

此时,依赖于SomeProperty的控件是按钮和标签项。但是,我可以想象,将来其他控件会添加到表单中,并且也依赖于SomeProperty

正如您可能猜到的那样,我想以正确的方式设置它。但我不确切知道如何。你会如何实现这个?

3 个答案:

答案 0 :(得分:1)

我可以通过多种方式解决这个问题,根据您的情况,您可以选择最适合您的方式  1.当管理多个控件的状态(可见性或其他属性)取决于不同的对象时,数据绑定是一种优雅的解决方案。此question中的其他详细信息  2.如果状态的组合仅限于几个案例到最多4-5个案例,则可以编写不同的函数。这种方式你仍然可以推断根据你所依赖的对象设置状态的方法。例如:Basic_Editing,Advaced_Editing,Custom_Editiong等  3.如果案例数量有限,您可以创建多个表单(用户控件)并根据依赖属性(或您正在讨论的对象)的状态按需加载它们。

  

只是拥有一堆if else会让你的代码更难维护或理解,逻辑地将状态分组,以便1.你可以稍后解释,2。其他人理解原因/逻辑3.当有一个需要更改它可以本地化为这些模块化方法(技术)之一,减少修复和测试的时间。

答案 1 :(得分:0)

我会在表单构造函数中这样做:

myControl.Visible = myObject.SomeProperty && !myObject.SomeOtherProperty;
myOtherControl.Visible = !myObject.SomeProperty;
....

代码越少,变化越快。

您可以创建单独的函数,这些函数将在运行时为每个表单视图基于对象属性动态生成控件。

答案 2 :(得分:0)

首先,我可以看到你正在设置可见性开启/关闭它意味着你每次都已经对表单进行了控制..所以这不是一个好的做法,而只是在需要时创建控件。

对于您的方案,您可以拥有function Initialize(),其中包含用于检查是否应显示特定控件的所有代码,然后创建它并将其添加到Forms控件集合中。如果以后添加任何新控件,您可以更新一个函数。

如果您可以为您提供更多详细信息,则可以给出更精确的答案