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

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

form design

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

有帮助吗?

解决方案

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

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();

其他提示

格雷格·赫尔曼写道:

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

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

我喜欢邓肯的回答,因为这意味着每个节点的接口设计都可以保留 完全地 分离。这意味着我不会在捕捉指南和其他设计时间优势上出现重叠。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top