首页 / 知识

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

2023-04-11 18:24:00

How to create a tree-view preferences dialog type of interface in C#?

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

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

form design

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


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

1
2
3
this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

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

也许主窗体可以在一个面板中使用带有静态TreeViewSplitContainer,并在另一面板中使用空格来添加这些窗体。添加它们后,可以使用Hide/ShowBringToFront/SendToBack方法来翻阅它们。

1
2
3
SeparateForm f = new SeparateForm();
MainFormSplitContainer.Panel2.Controls.Add(f);
f.Show();


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

Why not just show/hide the proper container when a node is selected in the grid? Have the containers all sized appropriately in the same spot, and hide all but the default, which would be preselected in the grid on load.

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

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


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

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

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

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


首选项对话框视图接口

最新内容

热门文章

推荐文章

标签云

猜你喜欢