完成项目:https://uploadfiles.io/wz8ji
关注代码:
代码C#:
public partial class MainWindow : MetroWindow
{
public MainWindow()
{
InitializeComponent();
}
private void Textbox_KeyUp(object sender, KeyEventArgs e)
{
if (textbox.Text != string.Empty)
{
this.ShowMessageAsync("This is the title", "Some message");
}
}
}
代码xaml:
<Controls:MetroWindow x:Class="Wpf.MainWindow"
xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TabControl HorizontalAlignment="Left" Height="324" Margin="88,31,0,0" VerticalAlignment="Top" Width="605">
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5">
<TextBox
x:Name="textbox"
HorizontalAlignment="Left"
Height="23"
Margin="10,10,0,0"
TextWrapping="Wrap"
Text="TextBox"
VerticalAlignment="Top"
Width="120"
KeyUp="Textbox_KeyUp"/>
</Grid>
</TabItem>
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5"/>
</TabItem>
</TabControl>
</Grid>
</Controls:MetroWindow>
在我的文本框中,当我快速删除并键入时,事件将重复。当我删除并键入&#34; 1&#34;通常,一切都很好。问题是我删除并输入任何非常快的字符。当我快速执行此操作时,事件将重复。
我也使用这个:http://mahapps.com/
我在没有使用&#34; mahapps&#34;的情况下创建了另一个项目,它运作正常。
以下是它的发生方式:
按退格键并快速释放+ 1 键。
任何解决方案?
答案 0 :(得分:2)
好吧,我已将您的代码提交给不同的测试,并且该方法没有重复...
int i = 0;
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if(((TextBox)sender).Text != string.Empty)
{
System.Diagnostics.Debug.WriteLine("Hello " + ++i);
}
}
验证另一个活动控件没有关联的键盘事件,这可能是问题所在。
正如你在聊天中告诉我的那样,你快速按退格键+ 1,好吧,错误是你的代码只要TextBox不为空就会检测到任何键的脉动,所以,你必须做的是限制使用Back
private void Textbox_KeyUp(object sender, KeyEventArgs e)
{
if (textbox.Text != string.Empty && e.Key != Key.Back)
{
this.ShowMessageAsync("This is the title", "Some message");
}
}