keyDown:首次按下时发生
keyPress:控件具有焦点并且用户按下并释放时发生
keyUp:每次释放时发生
private void Command_CbB_KeyUp(object sender, KeyEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
string command = comboBox.Text.Trim();
Console.WriteLine("Command_CbB_KeyUp,command=" + command);
if (e.KeyCode == Keys.Enter && !string.IsNullOrEmpty(command))
{
//SendCommand_Btn_Click(null, null);
Console.WriteLine("Command_CbB_KeyUp,input");
}
}
private void Command_CbB_KeyPress(object sender, KeyPressEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
string command = comboBox.Text.Trim();
Console.WriteLine("Command_CbB_KeyPress,command=" + command);
Console.WriteLine("e.keyChar=" + e.KeyChar);
if (e.KeyChar == '\r' && !string.IsNullOrEmpty(command))
{
//SendCommand_Btn_Click(null, null);
Console.WriteLine("Command_CbB_KeyPress,input");
}
}
private void Command_CbB_KeyDown(object sender, KeyEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
string command = comboBox.Text.Trim();
Console.WriteLine("Command_CbB_KeyDown,command=" + command);
if (e.KeyCode == Keys.Enter && !string.IsNullOrEmpty(command))
{
SendCommand_Btn_Click(null, null);
Console.WriteLine("Command_CbB_KeyDown,input");
}
}
上图可以看出在控件ComboBox,为中文输入法时输入内容,KeyDown=和KeyUp=事件有回调,并且值均为空;
点击回车按键,依次回调KeyDown=、KeyPress=s、KeyPress=sm、KeyPress=smp、KeyUp=smps、KeyUp=input;
再次点击回车,依次调用KeyDown=smps、KeyDown=input、KeyPress=smps、KeyPress=input、KeyUp=smps、KeyUp=input
总结:
1.KeyDown、KeyUp会在每次输入字符时回调,并且command一直为空字符串
2.首次点击回车,KeyDown、KeyPress、KeyUp回调,KeyDown回调一次,command值为空,KeyPress回调次数为文本框的字符数量,command值依次为空、s、sm、smp,KeyUp回调次数为一次,command值为smps
3.再次点击回车,KeyDown、KeyPress、KeyUp都会回调一次,且command值均为smps
我这里的需求是,先输入指定的指令,如果是中文输入法,第一次点击回车,指定指令回填到文本框中,第二次回车,才会触发发送指令的命令,所以此处我会使用KeyDown方法。各位可以按照实际需求使用。