【发布时间】:2015-06-29 20:44:55
【问题描述】:
我已经搜索了相关帖子,但没有得到什么
我创建了一个用户控件。在我的用户控件中有一个文本框。我想在我的用户控件中有一个事件,每当文本框TextChanged 事件引发时就会触发。
这是我到目前为止所做的:
(这是用户控制的代码)
public event EventHandler txtchnged;
public void ontxtchnged()
{
txtchnged(this, EventArgs.Empty);
}
public MyTextBox()
{
InitializeComponent();
textBox1.TextChanged += textBox1_TextChanged;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
ontxtchnged();
}
这是我使用用户控件的地方
public RegisterMainFrm()
{
InitializeComponent();
myUserControl1.txtchnged += myUserControl1_txtchnged;
}
private void myUserControl1_txtchnged(object sender, EventArgs e)
{
Console.WriteLine("hello");
}
这行得通,我知道代码可能不干净,但这不是问题。问题是:“hello”将在控制台打印两次,我真的不知道为什么以及如何解决它。
【问题讨论】:
-
您的代码看起来不错,因此看起来您的文本框正在更改两次。
-
在
ontxtchnged();行放置断点。然后检查调用堆栈以查看原因。如果您想获得完整的答案 - 发布MCVE。提供的代码将输出一个"hello",以对textBox1.Text进行一次更改。其他地方的错误(如果有的话)。 -
也许右键单击 myUserControl1_txtchnged 并选择查找“查找所有引用”。可能是潜伏在某处的另一个连接。
-
代码可能不干净,但这不是问题 - 这是阅读和维护代码以及回答此问题的问题。
-
@hungndv I think 你的答案是正确的。如果您不想取消删除它,因为它(IMO 错误地)已经被否决了,您可以发布一个新的(可能解释太短而且人们不理解它)。好吧,当然我也可能错了……