【问题标题】:Own component with panel自带面板组件
【发布时间】:2011-02-07 19:56:45
【问题描述】:

我想创建自己的组件,该组件由另外两个面板组成。其中一个是固定内容(如控制按钮等),另一个是标准面板,我可以在设计器中添加其他组件(VS2008)。 我知道我必须创建 UserControl,我可以在其中放置两个面板。然后我想将我的组件插入到表单中。但我不知道如何创建只能将其他组件(例如按钮、标签等)添加到组件的第二个面板中的行为。 谁能帮我创建这个组件?

谢谢。 亚当。

【问题讨论】:

    标签: c# components designer panel


    【解决方案1】:

    这是一个示例(工作代码的 sn-p):

      [Designer(typeof(NavigationalUserControl.Designer))]
      public partial class NavigationalUserControl : UserControl
      {
        class Designer : ControlDesigner 
        {
          public override void Initialize(IComponent component)
          {
            base.Initialize(component);
            var nc = component as NavigationalUserControl;
            EnableDesignMode(nc.panel2, "ContainerPanel"); 
            EnableDesignMode(nc.bottomPanel, "BottomPanel");
          }
        }
    
        // rest of normal class
      }
    

    【讨论】:

    • 这个解决方案还有一个问题。设计器模式下的组件行为是正确的,但是每当我将任何组件添加到容器面板并运行程序时,组件都会消失。似乎设计师没有在 InitComponent 部分添加组件。有什么办法可以解决吗?谢谢。
    • @Adam:只需在构造函数中添加即可。将它放在 InitComponent 部分可能会导致它丢失。
    • 这意味着如果我想在容器面板中添加按钮,我将不得不手动添加到构造函数中:panel2.Controls.Add(button1); ?没有更好的办法吗?我认为我做错了什么。 :-(
    • @Adam:不,它将被添加到 InitComponent 中,然后从设计器中添加。如果它是永久的,则将其添加到构造函数中。
    【解决方案2】:

    我找到了正确的解决方案(我希望如此)。我在我的 UserControl 中添加了一个属性,该属性返回具有此特定属性的内容面板:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public Panel PanelContent
    {
       get { return this.panel2; }
    }
    

    感谢你的帮助 leppie

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 1970-01-01
      • 2012-12-24
      • 2015-08-29
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多