用于继承UI样式控件的WinForms事件

时间:2009-02-26 15:07:29

标签: winforms user-interface controls

跟进这个问题:

Winforms Style / UI Look and Feel Tips

所以我创建了我的“基本控件”,其他控件从中继承。为了测试,我试图改变一个基本标签的字体。但它并没有传播到从它继承的控件。在其中一个表单中,我可以看到设计器文件正在设置控件的属性,因此我的基本控件的属性被覆盖。

在基本控件上我使用构造函数来设置默认属性。我应该使用不同的活动吗?如果是这样,那一个。

以下是基于评论请求的其中一个基本控件的代码...

Public Class InfoLabel
    Inherits Label

    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Me.Font = New System.Drawing.Font("Tahoma", 14.25!)
        Me.ForeColor = System.Drawing.Color.FromArgb(CType(CType(49, Byte), Integer), CType(CType(97, Byte), Integer), CType(CType(156, Byte), Integer))
        Me.AutoSize = False

    End Sub
End Class

基本控件显示在winform编辑器上的项目工具箱中。然后从工具箱中拖放控件。

1 个答案:

答案 0 :(得分:2)

您的问题是您的自定义控件的InitializeComponent()方法。我不知道为什么会这样。如果您正在实现UserControl,则会自动获得该方法,但是从标准控件继承该方法不应该存在。你的基类有一个InitializeComponent()方法而你的子类也有一个,有人会覆盖别人。

我只是在C#中使用了一个标签。我把它拖到我的表单上,字体显示为新字体,而不是基本(Label)类的字体。

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyLabel : Label
    {
        public MyLabel()
        {
            Font = new Font("Candara", 14);
        }
    }
}

然后我创建了第二个标签,名为MySubLabel,它继承自MyLabel类。当我在MyLabel类上更改ForeColor时,MySubLabel会自动更新。

所以这应该有效。

警告:在Visual Studio中,您需要在尝试查看设计器中的更新之前重新编译程序集。