父控件:namespace SYSBASE_CTL
{
    public partial class ComBoxStyle1 : UserControl
    {
        protected string labelText;
        protected DataSet dataSet;
        protected string displayName="";
        protected string valueMember="";        public event EventHandler GetConTent;        public ComBoxStyle1()
        {
            InitializeComponent();
        }        private void ComBoxStyle1_Load(object sender, EventArgs e)
        {
            label1.Text =labelText;
            panel1.Width = label1.Width;             try
            {
               comboBox1.DataSource = dataSet.Tables[0].DefaultView;
               comboBox1.DisplayMember = displayName;
               comboBox1.ValueMember = valueMember;
            }
            catch 
            {
            }
        }        protected void OnGetConTent(object sender,EventArgs e)
        {
            if (GetConTent != null)
                GetConTent(sender, e); 
        }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(comboBox1.ValueMember!="")
                OnGetConTent(comboBox1.SelectedValue , e);
        }
    }
}继承的子控件:
namespace ZJ_CTL
{
    public partial class SYSPZK_ZllyCombox : SYSBASE_CTL.ComBoxStyle1
    {
        public SYSPZK_ZllyCombox()
        {
            InitializeComponent();            labelText = "药品治疗领域:";            dataSet = null;            ZJ.SYSPZK syspzk = new ZJ.SYSPZK();
            dataSet = syspzk.GetZlly();
            displayName = "ZW";
            valueMember = "NM";
        }
    }
}问题1:父控件的Load事件是什么时候触发的,它和子控件的构造public SYSPZK_ZllyCombox()是什么关系?实际使用中,它好象先于
ZJ.SYSPZK syspzk = new ZJ.SYSPZK();
dataSet = syspzk.GetZlly();
displayName = "ZW";
valueMember = "NM";
就执行了问题2:
protected void OnGetConTent(object sender,EventArgs e)
{
   if (GetConTent != null)
      GetConTent(sender, e); 
}
GetConTent!=null是什么意思?谢谢!

解决方案 »

  1.   

    问题一,应该不会呀!
    问题二,没有GetConTent事件被设置,则调用之
      

  2.   

    Load事件应该是在Show的时候才调用
      

  3.   

    问题一,不会!
    问题二,GetConTent事件如果被注册,则执行。
      

  4.   

    GetConTent 看你的代码没有设置这个事件,所以应该不会执行。
      

  5.   

    我也认为当我
    ZJ.SYSPZK syspzk = new ZJ.SYSPZK();
    dataSet = syspzk.GetZlly();
    displayName = "ZW";
    valueMember = "NM";
    后再调用,父控件的Load,但现在Load肯定先执行了: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
                if(comboBox1.ValueMember!="")  如果不加这一句的话,
       comboBox1.SelectedValue最初的值是:System.Data.DataRow...
                    OnGetConTent(comboBox1.SelectedValue , e);
    }
      

  6.   

    我知道原因了:
    try
    {
       是这三句的次序的原因!
       comboBox1.DataSource = dataSet.Tables[0].DefaultView;
       comboBox1.DisplayMember = displayName;
       comboBox1.ValueMember = valueMember;
    }
    catch 
    {
    }但还是有另外一个问题,因为在设计父控件的时候,并没有dataSet,所以我只能try它,否则就出错。不知道各位高手有什么办法。早先VB是有一个状态表示是控件设计时,还是运行时!谢谢