![](/img/trans.png)
[英]Detect multiple Keyup / Keydown events and stop code firing on each C# / VB.Net
[英]Prevent multiple firing of keydown events C#
我想允許用戶在文本框中按Enter時發送消息。 我去搜索和即時通訊使用下面的示例代碼。
現在的問題是,當我按Enter鍵時,該事件被觸發了不止一次,大約是4-5次。
有人建議使用keyup。 我已經嘗試過按鍵,按鍵按下和按鍵。 都有相同的問題。 如何防止它多次觸發事件?
private void tbxAnswer_TextChanged(object sender, EventArgs e)
{
tbxAnswer.KeyUp += new KeyEventHandler(tbxAnswer_KeyUp);
}
private void tbxAnswer_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == (char)13)
{
MessageBox.Show("Hello");
}
}
謝謝!
這是因為每次更改文本時,都會調用/觸發tbxAnswer_TextChanged,您將一個操作分配給keyup事件。 如果文本更改了4次,則您分配了4次keyup事件,並且每次更改文本時該事件都會增加。 試試這個:
tbxAnswer.KeyUp += new KeyEventHandler(tbxAnswer_KeyUp);
private void tbxAnswer_TextChanged(object sender, EventArgs e)
{
}
private void tbxAnswer_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == (char)13)
{
MessageBox.Show("Hello");
}
}
您將多次添加KeyUp
事件處理程序(在TextChanged
處理程序內部); 因此,當按下Enter鍵時,處理程序將執行多次。
您要在此處執行的操作是,在InitializeComponent()
調用之后,僅在窗體的構造函數中添加一次KeyUp
處理程序:
public MyForm()
{
// other code possibly here
InitializeComponent();
// and now add the event handler:
tbxAnswer.KeyUp += new KeyEventHandler(tbxAnswer_KeyUp);
}
private void tbxAnswer_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == (char)13)
{
MessageBox.Show("Hello");
}
}
將您的代碼更改為此
tbxAnswer.KeyUp -= tbxAnswer_KeyUp;
tbxAnswer.KeyUp += new KeyEventHandler(tbxAnswer_KeyUp);
在您的代碼段中,每當TextBox
更改時,就會將另一個事件處理程序添加到KeyUp
處理程序中。 您僅應添加一次事件處理程序(例如,僅在創建文本框之后)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.