【问题标题】:Create controls dynamically or create controls in a side form? C# winforms动态创建控件还是以侧面形式创建控件? C# 窗体
【发布时间】:2012-07-20 10:22:03
【问题描述】:

我有一个充满控件的表单,没有其他控件的空间。在表单的底部,我有一个面板,上面有一些控件。

我的目标是当单击某个按钮时,底部的原始面板将替换为另一个包含可以在程序启动之前创建的控件的面板,这意味着不需要创建面板中的这些控件动态的。将通过将每个面板的可见字段设置为其匹配值来执行替换操作。

我想到了两种方法 - 动态创建新面板(及其控件)并将其添加到表单而不是原始面板中,或者以另一种形式创建新面板并单击相关按钮从该表单中取出面板并添加到所需的表单(通过创建新表单的实例并将其设为面板的修饰符公开)。 “side form”的目的只是创建那个面板,它没有自己的功能。

动态创建新面板的优点:

  • 无需创建零功能表单。

以侧面形式创建新面板的优点:

  • 哪些控件添加到新面板及其位置非常清楚。
  • 在新面板中设置控件的位置和其他字段非常容易。

哪种方式更好?

谢谢!

【问题讨论】:

  • 有时使用 TAB 等控件是最好的选择......也要考虑这些行......
  • @Arif 我已经有一些标签,我想将新面板添加到选定的标签..

标签: c# .net winforms


【解决方案1】:

你考虑过 TabControl 吗?这似乎很适合您的需求。我能想到的其他控件是 StackPanel(对于 Windows 窗体可以相当容易地完成)或类似 OutlookBar 的控件(又是一个用户控件)。

最简单最快的方法似乎是 TabControl。

编辑:

  1. 我想 SideForm 是一种不同的窗口形式。因此,如果您正在考虑将控件公开,然后更改其可见性等,请不要这样做。在 MainForm 中使用委托处理 SideForm 的事件。
  2. 正如您所提到的,没有更多控件的空间,我建议使用更多屏幕,而不仅仅是一个。话虽如此,我对您当前的 UI 设计和功能知之甚少,所以这取决于您。

我会说隐藏控件并仅使用可见性就可以了。这意味着您不必担心运行时控件的定位、锚定和停靠。问题很可能是加载表单。拥有大量关联数据的控件可能会减慢速度。

【讨论】:

  • 正如我对@Arif 所说,我已经有一些标签,我想将新面板添加到选定的标签中......
  • 感谢您的回复。 1) SideForm 确实是另一种形式。我并不是要改变 SideForm 的控件可见性,我打算从 SideForm 中取出面板并将其复制到 MainForm 中,然后在 MainForm 中更改原始面板的可见性。 2) 用户坚持在 MainForm 上有该面板。我无法在 MainForm 中创建 2 个面板,因为表单中没有空间来制作它。
  • 所以你要提供拖放功能?
  • 没有。我为什么要?在我从 SideForm 中取出面板并将其复制到 MainForm 后,每次单击按钮时都会显示另一个面板,并且当前显示的面板会被隐藏。
  • 复制到MainForm是什么意思?
【解决方案2】:

IMO 最好的方法是为此目的使用用户控件。只需为您希望显示/隐藏的每个面板创建一个用户控件,然后将控件放置在其中。这样一来,您将同时拥有:设计师和您想要的“额外形式”。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2011-06-10
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多