【问题标题】:WinForms Events for Inheriting Controls for UI Style用于继承 UI 样式控件的 WinForms 事件
【发布时间】:2023-03-25 12:43:02
【问题描述】:

跟进这个问题:

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 编辑器的项目工具箱中。然后从工具箱中拖放控件。

标签: winforms user-interface controls


【解决方案1】:

您的问题是您的自定义控件的 InitializeComponent() 方法。我不知道为什么会在那里。如果您正在实现 UserControl,您将自动获得该方法,但从标准控件继承该方法不应该存在。由于您的基类有一个 InitializeComponent() 方法,而您的子类也有一个,因此有人正在覆盖其他人。

我只是在 C# 中对标签进行了子类化。我将它拖到我的表单上,字体显示为新字体,而不是基(标签)类的字体。

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 中,您需要在尝试在设计器中查看更新之前重新编译程序集。

【讨论】:

  • 同意,不知道 InitializeComponent() 来自哪里。这仅适用于具有自定义设计器的控件,例如 Form 和 UserControl。只需将其从您的代码中注释掉,它就会按预期工作。
  • 我按照您的步骤操作,但无法正常工作。是VS拖放吗?步骤: 1-创建新类,粘贴您的代码。 2-编译项目 3-从工具箱拖放到窗体上。 4-它按预期继承设置 5-更改基类道具。重新编译。 6-标签是拖放没有变化
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2021-07-19
  • 2016-10-11
相关资源
最近更新 更多