描述:小弟写了一个label和TextBox的组合控件类LabelTextBox .cs,该类继承自System.Windows.Forms.UserControl,所以不得不写大量的属性和事件来提供对label和TextBox属性的支持(类没有直接继承TextBox,故所有TextBox属性信息丢失?)
问题:想请问高人能否直接继承自TextBox,然后通过重写OnPain来绘制一个Label出来?能否给出关键的写法?拜谢了!

解决方案 »

  1.   

    就用你的第一种方法,我一直都这样用,好象没出现过你说的问题啊。继承textbox好象不太好处理,我没用过,即使继承textbox目的也是封装一下textbox,添加一些自己需要的功能而已。
      

  2.   

    楼上的仁兄,类继承自System.Windows.Forms.UserControl时文本框的KeyPress、Leave、Enter等事件你是怎么处理的?文本框、label的诸多属性怎么处理呢?可否发个源代码给小弟看一看?
      

  3.   

    这很简单,可以自己封装这些方法!在控件中声明一个事件及其委托,在控件的Text或Label的相关事件被触发时触发这个定义的事件。
    举个例子,假设现在要继承TextBox的KeyPress事件。那么可以在控件中增加如下代码:public delegate void TxtKeyPressHandler(object sender,System.Windows.Forms.KeyPressEventArgs e);
    public event TxtKeyPressHandler  OnTextKeyPress;假设组合控件中TextBox的ID为textBox1,在其KeyPress事件里触发自定义事件:private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
    if(OnTextKeyPress!=null)
    {
    OnTextKeyPress(sender,e);
    }
    }=====
    在用户窗体中则像一般使用一样,增加一个OnTextKeyPress事件即可,假设Form中控件的ID为userControl1,则只要声明一下
    userControl1.OnTextKeyPress+=new MyUserControl.TxtKeyPressHandler(userControl1_OnTextKeyPress);
    private void userControl1_OnTextKeyPress(object sender, KeyPressEventArgs e)
    {
    MessageBox.Show("Key has been pressed");
    }
      

  4.   

    楼上的方式我有实现,问题是有很多事件,都要这样写很麻烦
    我的问题是:能否直接继承自TextBox,然后通过重写OnPain来绘制一个Label出来?