加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – WINFORM或WPF:如何在发出它的类的构造函数中触发自定义事

发布时间:2020-12-16 01:39:52 所属栏目:百科 来源:网络整理
导读:我有一个userControl11(在winform或wpf中),它有一个ValueChanged自定义事件.如果我把它放在客户端表单中并在form_load中将其值设置为100,它将触发ValueChanged事件.但是如果我在UserControl1的构造函数中设置此值,则不会触发自定义事件.我怎么强迫它这样做?
我有一个userControl11(在winform或wpf中),它有一个ValueChanged自定义事件.如果我把它放在客户端表单中并在form_load中将其值设置为100,它将触发ValueChanged事件.但是如果我在UserControl1的构造函数中设置此值,则不会触发自定义事件.我怎么强迫它这样做?

无论技术原因如何,从功能上来说它确实有意义.如果对象正在从客户端表单未知的某些源初始化其值,并且客户端表单具有绑定到此usercontrol值的文本框,则可以确保它可以随时刷新其文本框,包括表单只加载一个事件处理程序如果没有这个,客户端表单必须在表单加载时为此绑定文本框创建另一个初始化程序.

在winform中我的试验的源代码下面:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void userControl11_ValueChanged()
        {
            MessageBox.Show(userControl11.Value.ToString());
        }

        private void Form1_Load(object sender,EventArgs e)
        {
           // This will trigger ValueChanged Event
            userControl11.Value = 100;
        }
    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace customevent
{
    [DefaultEvent("ValueChanged")]
    public partial class UserControl1 : UserControl
    {
        private int m_value;

        public delegate void ValueChangedHandler();
        [Category("Action")]
        [Description("Value changed.")]
        public event ValueChangedHandler ValueChanged;

        public int Value
        {
            get { return m_value; }
            set { 
                m_value = value;
                if (ValueChanged != null)
                {
                    ValueChanged();
                }
            }
        }

        public UserControl1()
        {
            InitializeComponent();
            // this won't trigger ValueChanged Event
            this.Value = 100;
        }
        public UserControl1(int iValue)
        {
            this.Value = iValue;
            InitializeComponent();
        }

    }
}

解决方法

在课堂上,您可以使用On Events.

事件受到保护,因此您无法从托管表单触发它们,但可以从类中调用它们. (如果要从calss外部手动触发它们,则需要使用自定义方法公开它们.)

public UserControl1(IEnumerable<Action> subscribers)   {

   this.OnValueChanged(new EventArgs());
   this.Value = 100;
}

阅读您正在呼叫的特定事件,并将正确的EventArgs发送到该事件.
On事件是调用事件的方法.
On事件受到保护,您可以重载它们,只需记住最后使用基本功能.

编辑:

根据MSDN中的Event Design,每个事件都有一个名为OnEvent的匹配方法(与On前缀相同的名称).
这些方法用于引发基本事件.

传递的EventArgs与同名事件相同,因此如果要查看传递的参数,请阅读实际事件的MSDN描述.

我建议只订阅该事件,并使用断点来查看EventArgs的外观.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读