【问题标题】:C# How to implement a form which controls are dependant of some properties?C#如何实现控件依赖于某些属性的表单?
【发布时间】:2011-03-01 09:22:46
【问题描述】:

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

无论为特定对象设置什么属性,表单始终具有一些基本功能。

现在我有这样的东西:

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

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

正如您可能猜到的那样,我想以正确的方式进行设置。但我不知道具体怎么做。你将如何实现它?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      是不是代码越少,变化越快。

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

      【讨论】:

        【解决方案3】:

        首先我可以看到您正在打开/关闭可见性,这意味着您每次都已经在表单上设置了控件。所以这不是一个好的做法,而是仅在需要时创建控件。

        至于您的场景,您可以拥有一个function,例如Initialize(),其中包含用于检查是否应显示特定控件的所有代码,然后创建它并将其添加到表单控件集合中。如果以后要添加任何新控件,您需要更新一个功能。

        如果您可以为您的场景提供更多细节,可以给出更准确的答案

        【讨论】:

          猜你喜欢
          • 2022-12-17
          • 2010-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-25
          • 2012-11-10
          • 1970-01-01
          相关资源
          最近更新 更多