如何在C#中创建树视图首选项对话框类型的接口?

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

什么是设计/编码树视图首选项对话框的最佳方法?我一直在讨论的方式是在左侧用一个停靠树控件构建主窗口。然后,我一直在创建与树的每个节点相对应的容器控件。当选择一个节点时,应用程序将该节点的相应容器控件放到前面,将其移动到正确的位置,并在主窗口中将其最大化。这在设计时似乎真的很笨重。这基本上意味着我在设计时会在主窗口边缘以外拥有大量的容器控件,因此我必须不断滚动主窗口以便与它们一起工作。我不知道这是否完全符合我写这篇文章的意义,但是也许这种对于我所说的内容的视觉会更有意义:

基本上我必须使用这个巨大的表单,并在各个地方使用容器控件,然后执行一堆运行时重新格式化以使其全部工作。这看起来像是很多额外的工作。我是以一种完全愚蠢的方式做这件事吗?有没有一些“明显”更简单的方法来做到这一点,我错过了?

0
额外 编辑
意见: 2

3 答案

格雷格赫尔曼写道:

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

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

我喜欢Duncan的回答,因为这意味着每个节点的界面设计可以完全独立。这意味着我不会在捕捉准则和其他设计时间优势上重叠。

0
额外

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

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

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

另一种方式当然是在每个页面被请求时使用关于什么类型的设置的信息来生成gui代码。

0
额外

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

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

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

也许主表单可以在一个面板中使用带有静态 TreeViewSplitContainer ,并在另一个面板中添加这些表单。添加完成后,可以使用 Hide / ShowBringToFront / SendToBack 方法对其进行翻转。

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
0
额外