创建自定义Windows窗体控件的最佳方法是什么?

东方

我正在制作C#Windows窗体应用程序,该应用程序具有许多使用许多具有相同属性和样式的文本框和标签的窗体。而不是更改每个文本框和每个标签的属性,而是创建了一个从其MyTextBox继承的System.Windows.Forms.TextBox,然后按如下所示在类构造函数中更改了其属性的类:

class MyTextBox:TextBox
{
    public MyTextBox()
    {
        this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.Font = new System.Drawing.Font("Bookman Old Style", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        this.ForeColor = System.Drawing.Color.Blue;
        this.Size = new System.Drawing.Size(257, 23);
    }
}

构建项目类后,该类出现在工具箱中,并通过在我的窗体上创建此类的实例,使其工作正常。问题是,当我更改类中的任何属性MyTextBox并重建项目时,更改不适用于已经实例化的对象,并且当我查看设计器代码时,我发现IDE将所有属性从MyTextBox复制到设计器代码,因此对类代码进行任何更改后,我都必须重新创建所有实例。

private void InitializeComponent()
{
    this.MyTextBox1 = new WindowsFormsApplication9.MyTextBox();
    this.SuspendLayout();
    // 
    // MyTextBox1
    // 
    this.MyTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.MyTextBox1.Font = new System.Drawing.Font("Bookman Old Style", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    this.MyTextBox1.ForeColor = System.Drawing.Color.Blue;
    this.MyTextBox1.Location = new System.Drawing.Point(67, 43);

有什么办法解决这个问题?我希望对应用于所有已经实例化的对象的类代码进行任何更改,而无需重新创建它们,或者如果有更好的方法,请提供帮助。

假设我需要控制MyTextBox实例的5个属性,例如ForeColor,default Width,default Font Style,default FontsizeBorderStyleWidth属性外,所有其他属性均不应具有默认值以外的其他值。

雷扎·阿盖伊(Reza Aghaei)

首先,您应该为构造函数中的属性提供适当的默认值。然后,您应该覆盖或阴影属性,并使用以下属性之一装饰它们:

代码

using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.ForeColor = Color.Red;
        this.Font = new Font("Tahoma", 9, FontStyle.Italic);
        this.Width = 200;
    }

    [DefaultValue(typeof(Color), "Red")]
    public override Color ForeColor
    {
        get { return base.ForeColor; }
        set { base.ForeColor = value; }
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override Font Font
    {
        get { return base.Font; }
        set { base.Font = value; }
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new Size Size
    {
        get { return base.Size; }
        set { base.Size = value; }
    }
}

在上面的示例中,我创建了一个TextBox具有以下功能的自定义

  • 其缺省值ForeColorColor.Red如果您ForeColor在控件的实例中更改的值,则该值将被序列化。如果您在类中更改默认值,则只有那些ForeColor未被修改的实例将使用新的默认值,其他实例将使用其ForeColor值。
  • 的默认值Font是,new Font("Tahoma", 9, FontStyle.Italic)并且由于我们告诉设计者不要序列化Font属性,因此,如果您更改其他实例的值,则不会保存属性的新值,并且所有实例都将使用在的构造函数中设置的默认值MyTextBox
  • 为了设置默认值Width,使用户无法使用设计器进行更改,我重写Size并说设计器不对其进行序列化,因此宽度将设置为Width在构造函数中设置的默认值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

进行自定义排序的最佳方法是什么?

来自分类Dev

GWT:制作自定义ListBox的最佳方法是什么

来自分类Dev

自定义Bootstrap的最佳方法是什么

来自分类Dev

Windows窗体中的自定义控件出现问题

来自分类Dev

Windows窗体自定义控件绘画停止

来自分类Dev

自定义控件未绘制Windows窗体按钮

来自分类Dev

最佳WPF面板可创建自定义控件

来自分类Dev

创建自定义查找的最佳方法

来自分类Dev

保留在Knockout扩展中创建的自定义属性的最佳模式是什么?

来自分类Dev

在开发WordPress插件时创建自定义数据库表的最佳选择是什么?

来自分类Dev

制作自定义弹出式非页内广告的最佳方法是什么?

来自分类Dev

形成自定义std :: chrono :: durations和std :: ratios的最佳方法是什么?

来自分类Dev

指示Django在syncdb之后运行自定义SQL的最佳方法是什么?

来自分类Dev

在自定义Kendo小部件中使用AngularJS服务的最佳方法是什么?

来自分类Dev

将ssh公钥保存在自定义游民箱中的最佳方法是什么?

来自分类Dev

用静态IP为AppEngine设置自定义域的最佳方法是什么

来自分类Dev

将数据传递到自定义绑定处理程序的最佳方法是什么

来自分类Dev

使用自定义JSON BODY进行HTTP发布的最佳方法是什么

来自分类Dev

使用swift保存和加载自定义对象数组的最佳方法是什么?

来自分类Dev

制作自定义弹出式非页内广告的最佳方法是什么?

来自分类Dev

在DRF中管理自定义序列化程序的最佳方法是什么

来自分类Dev

自定义小部件的 JS 脚本的最佳方法是什么?

来自分类Dev

Windows 8需要创建向导自定义控件

来自分类Dev

在Visual Studio中使用c ++创建Windows窗体应用程序时的最佳线程化方法是什么?

来自分类Dev

自定义Windows窗体中的按钮

来自分类Dev

创建自定义android按钮的最佳方法

来自分类Dev

在MVC6中创建自定义模型联编程序的正确方法是什么?

来自分类Dev

在html中为现有标签创建和使用自定义属性的方法是什么

来自分类Dev

为用户创建自定义“项目页面”的正确方法是什么?

Related 相关文章

  1. 1

    进行自定义排序的最佳方法是什么?

  2. 2

    GWT:制作自定义ListBox的最佳方法是什么

  3. 3

    自定义Bootstrap的最佳方法是什么

  4. 4

    Windows窗体中的自定义控件出现问题

  5. 5

    Windows窗体自定义控件绘画停止

  6. 6

    自定义控件未绘制Windows窗体按钮

  7. 7

    最佳WPF面板可创建自定义控件

  8. 8

    创建自定义查找的最佳方法

  9. 9

    保留在Knockout扩展中创建的自定义属性的最佳模式是什么?

  10. 10

    在开发WordPress插件时创建自定义数据库表的最佳选择是什么?

  11. 11

    制作自定义弹出式非页内广告的最佳方法是什么?

  12. 12

    形成自定义std :: chrono :: durations和std :: ratios的最佳方法是什么?

  13. 13

    指示Django在syncdb之后运行自定义SQL的最佳方法是什么?

  14. 14

    在自定义Kendo小部件中使用AngularJS服务的最佳方法是什么?

  15. 15

    将ssh公钥保存在自定义游民箱中的最佳方法是什么?

  16. 16

    用静态IP为AppEngine设置自定义域的最佳方法是什么

  17. 17

    将数据传递到自定义绑定处理程序的最佳方法是什么

  18. 18

    使用自定义JSON BODY进行HTTP发布的最佳方法是什么

  19. 19

    使用swift保存和加载自定义对象数组的最佳方法是什么?

  20. 20

    制作自定义弹出式非页内广告的最佳方法是什么?

  21. 21

    在DRF中管理自定义序列化程序的最佳方法是什么

  22. 22

    自定义小部件的 JS 脚本的最佳方法是什么?

  23. 23

    Windows 8需要创建向导自定义控件

  24. 24

    在Visual Studio中使用c ++创建Windows窗体应用程序时的最佳线程化方法是什么?

  25. 25

    自定义Windows窗体中的按钮

  26. 26

    创建自定义android按钮的最佳方法

  27. 27

    在MVC6中创建自定义模型联编程序的正确方法是什么?

  28. 28

    在html中为现有标签创建和使用自定义属性的方法是什么

  29. 29

    为用户创建自定义“项目页面”的正确方法是什么?

热门标签

归档