none
C#自定义控件:如何让用户控件中的某个控件成为容器控件? RRS feed

  • 问题

  • 自定义控件设计中加入:
    [System.ComponentModel.Designer("System.Windows.Forms.Design.ParentControlDesigner,   System.Design ")]
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
        }

    这可以将UserControl1本身变为容器.哪如何将UserControl1内的某个控件变为容器呢?

    比如:自定义控件UserControl1中有个panel1控件,
    使用[System.ComponentModel.Designer("System.Windows.Forms.Design.ParentControlDesigner,   System.Design ")]后
    可以使自定义控件UserControl1本身具备容器控件功能,在ide"窗体应用程序设计"中也能象其它容器控件,比如panel一样,可以将别的控件拖进去.

    问题:可是我只想让UserControl1中的panel1控件成为容器,在ide"窗体应用程序设计"中也能象其它容器控件,比如panel一样,可以将别的控件拖进去,
    ,托进去的控件Dock 设为 Full时也只会占满这个panel1控件,而不是占满UserControl1本身,如何实现?

    诚心求解!!
    • 已编辑 vboykk 2009年3月16日 10:22
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月16日 16:02 Windows窗体设计器问题 (从 Visual C# 移动到 Visual Studio 相关讨论)
    2009年3月16日 3:29

答案

  • 你好!
         UserControl本身就继承于ContainerControl,已经是容器了!
         Panel本身也是一个容器啊!
         不好意思,看了半天没有明白你到底想要怎样的效果! 

    周雪峰
    2009年3月16日 11:39
    版主
  • 你让他继承于Pannel,本身就是容器了!不用特意写代码! 
    周雪峰
    2009年3月18日 5:20
    版主

全部回复

  • 楼主是不是想在继承这个UserControl1时也可以对panel1进行拖放控件操作,如果是的话,在 UserControl11 中 panel1 的Modifiers = Protected 就可以了
    知识改变命运,奋斗成就人生!
    2009年3月16日 5:13
    版主
  • 如果不是的话,就只能写自定义控件了
    知识改变命运,奋斗成就人生!
    2009年3月16日 5:14
    版主
  • 可能我的帖子没有写清楚,这就是自定义控件的设计,
    其中:
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
        }
    是C#自带的代码,而粗黑色是才是加入的代码.
    2009年3月16日 5:26
  • 同样把 UserControl11 中 panel1 的Modifiers = Protected 就可以了
    知识改变命运,奋斗成就人生!
    2009年3月16日 5:52
    版主
  • xxy兄说的UserControl11 是指将UserControl1控件放在IDE中的名称吗?
    我试过UserControl11 的属性中并没有panel1属性修改栏啊!
    不过在"控件设计"里将UserControl1.panel1的Modifiers = Protected 后,还是没有起到作用啊!
    还往详细描述一下.

    2009年3月16日 10:30
  • 你好!
         UserControl本身就继承于ContainerControl,已经是容器了!
         Panel本身也是一个容器啊!
         不好意思,看了半天没有明白你到底想要怎样的效果! 

    周雪峰
    2009年3月16日 11:39
    版主
  • 我估计楼主的目的是想让一个容器包含另一个容器,在设计时,又可以将控件放到里面那个容器中(这个不一定是Panel)
    如雪峰所说,想让其成为容器,就让它继承自ContainerControl就行了
    2009年3月16日 14:13
  •  就是 "火把" 兄说的意思哈,呵呵...
    就是想在设计时让自己的控件也成为容器,把别的控件托进来,只不过是托在自己控件中的某一个控件中而已!

    那继承的代码怎么写?比如就让Panel1具有容器功能?
    2009年3月18日 0:37
  • 你让他继承于Pannel,本身就是容器了!不用特意写代码! 
    周雪峰
    2009年3月18日 5:20
    版主