C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – WINFORM或WPF:如何在发出它的类的构造函数中触发自定义事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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.To@R_673_10495@ng());
        }

        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的外观.

大佬总结

以上是大佬教程为你收集整理的c# – WINFORM或WPF:如何在发出它的类的构造函数中触发自定义事件全部内容,希望文章能够帮你解决c# – WINFORM或WPF:如何在发出它的类的构造函数中触发自定义事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。