2013-02-26 124 views
0

下面是一个WinForms的标准Label控制的部分:派生自基类和覆盖功能

public class Label : Control 
{ 
     protected override void OnTextChanged(EventArgs e) 
     { 
      ... 
     } 
} 

我想重写OnTextChanged事件,但我不知道的最好的方式。

我应该从Label类派生一个子类,然后重写像这样的函数吗?

public class Class1 : Label 
{ 
    protected override void OnTextChanged(EventArgs e) 
    { 
     MessageBox.Show("S"); 
    } 
} 

如果是这样,怎么和我应该在哪里添加这个班?

如果不是,我该如何重写在控件中定义的函数?

+1

你的代码是正确的......你的问题“如何使用我的新'Class1'我的形式,而不是'Label'的情况下,对”? – 2013-02-26 06:17:07

+1

编译完项目后,您的Class1控件将位于工具箱中,位于其顶部 – 2013-02-26 06:20:48

+0

您是否重写了控件?如果是这样的话,你应该将事件处理程序分配给OnTextChanged事件。 – 2013-02-26 06:26:32

回答

4

这是您可以重写控制方法的方式。正如你所做的是绝对正确的,但详细的实施在这里。

这是组成部分

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class TestForm : Form 
    { 
     MyLabel newLable; 
     public TestForm() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      newLable = new MyLabel(); 
      newLable.Height = 30; 
      newLable.Width = 40; 
      newLable.Text = "hello"; 
      this.Controls.Add(newLable); 

     }  
    } 
} 

您可以使用MyLabel从工具箱也。

而且MyLabel类是

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 

    public class MyLabel:Label 
    { 

     public MyLabel() 
     { 

     } 
     protected override void OnClick(EventArgs e) 
     { 
      base.OnClick(e); 
      MessageBox.Show("Label Clicked"); 
     } 

    } 
} 
+0

非常感谢。一切进行得都很顺利 :) – user1422847 2013-02-26 07:41:55