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

时间:2008-08-06 17:22:27

标签: c# user-interface

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

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

form design

基本上我必须使用这个庞大的表单,在整个地方使用容器控件,然后进行一系列运行时重新格式化以使其全部工作。这似乎是额外工作的很多。我是以完全愚蠢的方式做这件事的吗?是否有一些“明显的”更简单的方法可以解决这个问题?

3 个答案:

答案 0 :(得分:10)

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

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

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

也许主要表单可以在一个面板中使用带有静态SplitContainer的{​​{1}},并在另一个面板中使用空格来添加这些表单。添加后,可以使用TreeViewHide/Show方法翻转它们。

BringToFront/SendToBack

答案 1 :(得分:2)

Greg Hurlman写道:

  

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

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

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

答案 2 :(得分:0)

我可能会基于继承CustomControl的基类创建几个面板类。然后,这些控件将具有Save / Load等方法。如果是这样,我可以单独设计每个面板。

我使用了一个Wizard控件,它在设计模式下处理了几个页面,因此可以在设计器中单击下一步并通过设计器一次设计所有页面。虽然这在将代码连接到控件时有几个缺点,但这可能意味着您可以通过构建一些设计器类来进行类似的设置。我从来没有在VS中写过任何设计师课程,所以我不知道如何或是否值得: - )

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

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