我不喜欢任何可用的解决方案,所以我开始制作自己的向导界面。我为向导的每个步骤都使用了一个 GroupBox,但由于每个步骤(每个 GroupBox)都必须具有相同的结构和样式,因此我决定使用自定义控件。
现在我需要一个具有以下元素的自定义 GroupBox:
FlowLayoutPanel,因此开发人员可以使用设计器将所需的控件放入其中。(例如两个 TextBox 控件,因此用户可以输入用户名和密码。)
该 FlowLayoutPanel 中用于描述步骤的标签。
一个按钮返回。
用户可以在其中放置自定义按钮的另一个 FlowLayoutPanel。
这是一个预览:
问题 #1
当我创建一个新的 UserControl 并使其继承 GroupBox 时,我无法获得可以在其中放置和定位内容的 GroupBox。我在设计器中看到的只是这条信息:
问题 #2
因为我不能让它像我想要的那样继承 GroupBox,所以我尝试通过在自定义 UserControl 中放置一个 GroupBox 来做到这一点。(我不想要这个。我只是这样做是为了提供一些屏幕截图。)在我这样做之后,我必须在 FlowLayoutPanels 上启用设计模式,以便开发人员可以使用设计器在其中添加控件。问题是它们也变得可移动和可调整大小(我不希望这样。它们已正确锚定,不应移动或调整大小。)当您尝试移动它们时,您会得到“对象引用未设置为一个东西。” 这使它更丑陋:
问题 #3
我希望主 FlowLayoutPanel 中的元素居中。为此,我必须放置一个控件(描述标签)并将其调整为 FlowLayoutPanel 的宽度,以便之后的控件居中。(如果您问我,解决方法很混乱。使用 TableLayoutPanel 执行此操作看起来更容易,但它们的单元格只能容纳一个元素。您可以添加一个面板以使单元格容纳更多元素,但随后您会失去居中。)问题是我必须设置为我添加的每个控件锚定到无。我可以挂钩一些东西(如 OnDesignerControlAdded???)以自动将添加的控件的 Anchor 设置为 None 吗?
您的所有回答都将帮助我在 GitHub 上构建开源项目Magician以及由它提供支持的许多其他开源项目。提前感谢您的所有努力。