如何在C#中创建树状图首选项对话框界面类型?

Translate

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

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

form design

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

This question and all comments follow the "Attribution Required."

所有的回答

xyz
Translate

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

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

这样,每种形式都可以在其自己的设计器中进行布局,在运行时实例化一次或多次,然后像常规控件一样添加到空白区域。

也许主要形式可以使用SplitContainer带有静态TreeView在一个面板中,在其他面板中添加这些表单的空间。添加它们后,可以使用Hide/Show要么BringToFront/SendToBack方法。

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
来源
Translate

格雷格·霍尔曼(Greg Hurlman)写道:

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

不幸的是,这就是我要避免的事情。我正在寻找一种在设计时处理接口的简便方法,并且需要最少的重新格式化代码以使其在运行时正常工作。

我喜欢Duncan的答案,因为这意味着可以保留每个节点的接口设计完全地分离。这意味着我不会在捕捉准则和其他设计时间优势上有所重叠。

来源
Translate

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

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

我对您打算如何处理控件中的值加载/保存有点好奇?如果您的所有页面都采用一种大格式,则在一个类中必须有很多代码?

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

来源