跟进这个问题:
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编辑器上的项目工具箱中。然后从工具箱中拖放控件。
答案 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中,您需要在尝试查看设计器中的更新之前重新编译程序集。