2011-06-29 27 views
1

我不喜欢任何可用的解决方案,所以我开始做我自己的向导界面。我为向导的每个步骤使用GroupBox,但由于每个步骤(每个GroupBox)都必须具有相同的结构和样式,因此我决定使用自定义控件。自定义GroupBox控件与其他控件内

现在我需要拥有这些元素的自定义分组框:

  • 一个FlowLayoutPanel的在其使用设计使开发人员可以把期望的控制。 (例如两个TextBox控件,以便用户可以输入用户名和密码。)

  • 在该FlowLayoutPanel中的标签来描述该步骤。

  • 一个按钮返回。

  • 另一个FlowLayoutPanel的用户可以把自定义按钮

这里是一个预览:

Preview of what the custom GroupBox should look like.

问题#1

当我创建一个新的用户控件和让它继承GroupBox,我不能得到一个GroupBox,我可以放置它并定位它。所有我的设计师看到的是这样的信息:

The error.

问题#2

既然我不能让它继承分组框中像我想它,我试图把一个分组框在做自定义UserControl。 (我不想这样做,我只是做了这个,所以我可以提供一些截图)。在完成之后,我必须在FlowLayoutPanels上启用DesignDesignMode,以便开发人员可以使用设计器在其中添加控件。问题在于它们也变得可移动和可调整大小(我不希望这样,它们被正确锚定,不应该被移动或调整大小),并且当您尝试移动它们时,您会得到“对象引用未设置为一个东西。”这是难看使它:

Movers and resizers on the FlowLayoutPanels.

问题#3

我想在主FlowLayoutPanel的元素为中心。为此,我必须放置一个控件(描述标签)并将其大小调整为FlowLayoutPanel的宽度,以便后面的控件居中。 (凌乱的解决方法,如果你问我,用TableLayoutPanel做这件事看起来比较容易,但是它们的单元格只能容纳一个元素,你可以添加一个Panel来让单元格容纳更多的元素,但这样你就失去了居中。)问题是我必须设置对于我添加的每个控件都锚定为无。我可以钩住一些东西(比如OnDesignerControlAdded ???)来自动将添加控件的Anchor设置为None吗?

Control positions with different Anchor values.

所有的答案都将帮助我建立的开源项目Magician on GitHub和搭载它的许多其他开源项目。预先感谢您的所有努力。对于问题#1

+0

你有没有找到答案?如果没有,我可能会帮助(至少有问题#1)。 –

+0

@Charles不,我没有。 – AlicanC

回答

3

快速回答:

窗体或用户控件(没关系)设计的组合框中(GroupBox1)。

转到designer.cs文件中的InitializeComponent(),并复制与groupbox及其子控件相关的所有代码。

将一个名为CustomGroupBox的新自定义控件添加到项目中。

更改它从分组框继承:

public partial class CustomGroupBox : GroupBox 

所有复制的代码粘贴到CustomGroupBox的构造(或进入一个新的方法,你从的InitializeComponent()之后的构造函数中调用,如果你想保持整洁)。

从粘贴的代码中删除所有出现的this.。将所有出现的GroupBox1替换为this

对于您希望开发人员有权访问的任何子控件,请为该控件添加公共属性。

E.g.

public FlowLayoutPanel FLP 
    { 
     get { return flowLayoutPanel1; } 
    } 

当然,并添加您CustomDesigner

public class CustomGroupBoxDesigner : ControlDesigner 
    { 
     public override void Initialize(IComponent component) 
     { 
      base.Initialize(component); 
      var c = component as CustomGroupBox; 
      EnableDesignMode(c.FLP, "FLP"); 
     } 
    } 

,并应用属性

[Designer(typeof(CustomGroupBoxDesigner))] 
public partial class CustomGroupBox : GroupBox 
+0

我用'GroupBox'而不是'FlowLayoutPanel'试过这个,但是当我添加'EnableDesignMode(c.GB,“GB”);'这一行时,自定义控件变成了“锁定”(既不可移动也不可调整大小)。有没有人有一个想法是什么可能导致它? – user5226582