gpt4 book ai didi

c# - WINFORM 或 WPF : How to trigger custom event inside the constructor of the class that emits it

转载 作者:行者123 更新时间:2023-11-30 14:18:26 26 4
gpt4 key购买 nike

我有一个 userControl11(在 winform 或 wpf 中),它有一个 ValueChanged 自定义事件。如果我将它放在客户端表单中并在 form_load 中将其值设置为 100,它将触发 ValueChanged 事件。但是如果我在 UserControl1 的构造函数中设置这个值,自定义事件将不会触发。我怎样才能强制它这样做?

无论出于何种技术原因,从功能上讲它确实有意义。如果对象从一些客户端表单未知的来源初始化它的值,并且客户端表单有一个绑定(bind)到这个用户控件值的文本框,那么它可以在任何时候刷新它的文本框肯定很方便,包括当表单加载时只使用一个事件处理程序。如果没有这个,客户端表单必须在表单加载时为此绑定(bind)的文本框创建另一个初始化程序。

下面是我在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();
}

}
}

最佳答案

您可以在类(class)中使用 On Events。

On 事件是 protected ,因此您不能从宿主表单中触发它们,但您可以从类中调用它们。 (如果您想从 calss 外部手动触发它们,则需要使用自定义方法公开它们。)

public UserControl1(IEnumerable<Action> subscribers)   {

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

阅读有关您正在调用的特定事件的信息,并将正确的 EventArgs 发送到该事件。On 事件是调用事件的方法。On 事件是 protected ,你可以重载它们,只记得在最后使用基函数。

编辑:

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

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

我建议只订阅事件,并使用断点来查看 EventArgs 的样子。

关于c# - WINFORM 或 WPF : How to trigger custom event inside the constructor of the class that emits it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com