用于UserControl的自定义文本属性的c#自定义TextChanged事件处理程序



我在c#中创建了一个自定义用户控件,并为该控件添加了一个自定义Text属性。然而,每当我的文本属性的值被改变时,我也想提出一个偶数,我想把它叫做TextChanged

下面是我为用户控件创建的属性的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestControls
{
    public partial class Box: UserControl
    {
        public Box()
        {
            InitializeComponent();
        }
        [Bindable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Browsable(true)]
        [Category("Appearance")]
        public override string Text { get { return base.Text; } set { base.Text = value; this.Invalidate(); } }
        [Browsable(true)]
        public event EventHandler TextChanged;
    }
}

正如你所看到的,我已经创建了TextChanged事件处理程序,但我不知道如何将其链接到Text属性,使其在'Text'的值发生变化时,事件将被引发。

请注意,我正在使用Windows窗体,我不使用WPF,我不想做任何需要WPF的事情。我为这个问题找到的每个解决方案都与WPF有关,或者它不能完全解决我的问题,因为他们没有试图为字符串创建事件处理程序。我不明白别人是怎么做到的,但我想知道是怎么做到的。谢谢。

您应该在Text属性的设置中手动调用事件处理程序委托。

public partial class Box : UserControl
{
    public Box()
    {
        InitializeComponent();
    }
    [Bindable(true)]
    [EditorBrowsable(EditorBrowsableState.Always)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Browsable(true)]
    [Category("Appearance")]
    public override string Text
    {
        get { return base.Text; }
        set
        {
            if (base.Text != value)
            {
                base.Text = value; this.Invalidate();
                if(TextChanged != null)
                    TextChanged(this, EventArgs.Empty)
            }
        }
    }
    [Browsable(true)]
    public event EventHandler TextChanged;
}

如果你只是想处理TextChanged事件,你不需要做任何事情,UserControl类有TextChanged正常工作。但它是不可浏览的,就像它的Text属性一样。

如果你想让它可浏览,作为另一种选择,你可以这样使用自定义事件访问器(事件属性):

[Browsable(true)]
public event EventHandler TextChanged
{
    add { base.TextChanged += value; }
    remove { base.TextChanged -= value; }
}

要了解有关语法的更多信息,请查看此MSDN资源:

  • 如何实现自定义事件访问器(c#编程指南)
  • 如何使用事件属性处理多个事件

相关内容

  • 没有找到相关文章

最新更新