日期:2014-05-18  浏览次数:20926 次

vs.net2003中用c#开发Winform的用户控件/自定义控件的属性问题(100分送上)
各位大侠:
  小弟想设计2个用户控件,假定A为控件1,B为控件2,A和B各自含有一个下拉列表(ComboBox)控件。
  A、B这两个控件有二级联动的关系,即在A中的下拉列表控件选定了某项后,B中的下拉列表控件会自动生成对应的选项。
  简单的方法是将A、B两个控件做成一个用户控件,但是出于灵活性的考虑我必须做成两个控件。这就需要在其中一个控
件中设置一个属性来指向另外的控件。这个属性的效果就像在Webform中的验证控件具有的ControlToValidate属性一样,可
以列出当前页面上的其他控件名称。(如RequiredFieldValidator的ControlToValidate属性那样)。
  我了解到:
  1、如果是简单的单字段值的属性可以用下面的方法实现。
  private string XXXvalue = null;
  public string UserControlXXX
  {
  get{return XXXvalue}
  set{this.XXXvalue = value}
  }
  2、固定项目(在属性窗口中的)的下拉列表可以用枚举类型实现。
  3、用UITypeEdit实现自定义编辑窗口的。
  但2的方法不能实现动态获取Winform中父容器的控件,3的方法优点过于奢侈,我想要的仅仅是个下拉列表就可以了。
  而且在设计阶段,由于整个Winform窗体及其中的控件并没有实例化,使用xxxControl.parent.Controls来获取容器内控件的集合是不可以的。

  问题归纳:
  (1)用户控件或自定义控件中,这种动态下拉列表式的属性(property,非attributes)如何开发;
  (2)如何在设计阶段获取父容器中的控件集合;

  由于这种类型的属性在Webform中的验证控件中已经得到实现,恳请各位高手、大师们给小弟提供一点指引,感激不禁!!!

------解决方案--------------------
照平常那样写就可以了。
C# code

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        UserControl2 item;
        public UserControl2 Item//UserControl1里面有个属性,这个属性是UserControl2类型的。
        {
            get { return item; }
            set { item = value; }
        }
    }

------解决方案--------------------
如5楼所说, 直接写就行, VS2005会帮你完成这些事情的, 只要你的Property的Browsable的就行
------解决方案--------------------
(1)用户控件或自定义控件中,这种动态下拉列表式的属性(property,非attributes)如何开发;
---------------------------------------------
 public partial class UserControl1 : UserControl
 可以对控件继承重写

(2)如何在设计阶段获取父容器中的控件集合;
--------------------------------------
Webform中可以对网页的所有控件进行遍历,但Winform我没试过