18

我正在编写一个基本上只是一个首选项对话框的应用程序,很像 Visual Studio 本身使用的树视图首选项对话框。该应用程序的功能只是将数据从串行设备传递到文件。它在将数据写入文件之前对数据执行了很多很多转换,因此应用程序的 GUI 只是指示这些转换应该是什么的所有设置。

设计/编码树视图首选项对话框的最佳方法是什么?我一直在做的方式是在左侧构建带有停靠树控件的主窗口。然后我一直在创建与树的每个节点相对应的容器控件。选择节点时,应用程序将该节点的相应容器控件带到前面,将其移动到右侧位置,并将其最大化在主窗口中。这在设计时看起来非常非常笨拙。这基本上意味着我在设计时在主窗口边缘之外有大量容器控件,我必须不断滚动主窗口才能使用它们。我不知道这是否完全符合我写这篇文章的方式,但也许我正在谈论的这个视觉效果会更有意义:

形式设计

基本上我必须使用这个巨大的表单,到处都是容器控件,然后进行一堆运行时重新格式化以使其全部工作。这似乎是很多额外的工作。我这样做是完全愚蠢的吗?是否有一些我缺少的“明显”更简单的方法?

4

3 回答 3

11

一种更简洁的方法是为每个“窗格”创建单独的表单,并在每个表单构造函数中设置

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

这样,这些表单中的每一个都可以在自己的设计器中布局,在运行时实例化一次或多次,然后像普通控件一样添加到空白区域。

也许主窗体可以在一个面板中使用SplitContainer带有静态的 a TreeView,并在另一个面板中使用空间来添加这些表单。一旦它们被添加,它们可以通过使用Hide/ShowBringToFront/SendToBack方法来翻转。

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
于 2008-08-06T18:02:31.480 回答
2

格雷格·赫尔曼写道:

当在网格中选择一个节点时,为什么不只显示/隐藏正确的容器?让容器在同一位置的大小都适当,并隐藏除默认值之外的所有容器,默认值将在加载时在网格中预先选择。

不幸的是,这就是我试图避免的。我正在寻找一种在设计时处理界面的简单方法,只需最少的重新格式化代码即可使其在运行时工作。

我喜欢 Duncan 的回答,因为这意味着每个节点的接口设计可以完全分开。这意味着我不会在捕捉指南和其他设计时间优势上得到重叠。

于 2008-08-06T18:20:29.947 回答
0

我可能会基于继承 CustomControl 的基类创建几个面板类。然后这些控件将具有诸如保存/加载之类的方法和类似的东西。如果是这样,我可以分别设计每个面板。

我使用了一个在设计模式下处理多个页面的向导控件,以便可以在设计器中单击下一步并通过设计器一次设计所有页面。尽管在将代码连接到控件时这有几个缺点,但这可能意味着您可以通过构建一些设计器类来进行类似的设置。我自己从来没有在 VS 中编写过任何设计器类,所以我不能说如何或是否值得:-)

我有点好奇您打算如何处理向/从控件加载/保存值?如果你所有的页面都在一个大表单中,那么一个类中一定有很多代码吗?

还有另一种方法当然是在请求每个页面时生成 gui 代码,使用有关设置类型的信息。

于 2008-08-14T15:13:40.183 回答