我在Form中有一些控件,所以我在表单中读取并创建一个Event,允许我按 ENTER 将焦点更改为另一个控件。这是代码:
private void frSeleccionEL_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Control nextControl = this.GetNextControl(ActiveControl, !e.Shift);
if (nextControl != null)
{
e.Handled = true;
if (!(nextControl is Label))
{
nextControl.Focus();
}
else //the next control is currently a label
{
nextControl = this.GetNextControl(ActiveControl, true);
while (nextControl != null)
{
nextControl.Focus();
if (!(nextControl is Label))
{
break;
}
nextControl = this.GetNextControl(ActiveControl, true);
}
}
}
}
}
在不起作用的文本框中,我只有数字代码。这是代码:
private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
{
//Para obligar a que sólo se introduzcan números
if (Char.IsDigit(e.KeyChar))
{
e.Handled = false;
}
else
{
if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso
{
e.Handled = false;
}
else
{
//el resto de teclas pulsadas se desactivan
e.Handled = true;
}
}
}
我的问题是当我在此控件中按 ENTER 时没有任何反应,例如 ENTER 从未被按下,因为此控件的事件按键不会触发。
我删除了控件并重新制作,问题仍然存在。
我不知道出了什么问题。
答案 0 :(得分:1)
您的第一个代码太长,我们不需要它。如果要使用表单的SelectNextControl
方法将Enter按键转换为Tab开关。我可以看到你的txtLocal_KeyPress
对切换标签没有任何作用,所以你怎么知道发生了什么。 e.Handled
仅有助于抑制按键事件。我猜您的TextBox
已Multiline = true;
,并且您想要取消Enter按键,而是切换到下一个控件,否则您不必在TextBox
中使用{{来禁止输入按键1}}。这个简短的代码将帮助您:
Multiline=false
这就是解决问题的方法。
我不确定你是否知道如何用TextBox.KeyPress事件注册private void txtLocal_KeyPress(object sender, KeyPressEventArgs e){
if(e.KeyChar == 13)//Enter{
e.Handled = true;
SelectNextControl(txtLocal, true, true, true, true);
}
}
事件处理程序,所以我在这里添加它来帮助你:
KeyPress
答案 1 :(得分:0)
试试这个:
private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
{
//Para obligar a que sólo se introduzcan números
if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) )
{
e.Handled = true;
}
}
答案 2 :(得分:0)
请在表单键上使用此代码,这样可以提供更好的性能
private void frSeleccionEL_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
ProcessTabKey(true);
}
}
请确保您已在所有控件上设置了标签索引。
然后将文本更改为事件代码。如果您使用自定义文本框而不是在所有表单上编写此代码,那将会更好。
答案 3 :(得分:0)
试试这个......
private void txtLocal_KeyPress(object sender, KeyPressEventArgs e)
{
//Para obligar a que sólo se introduzcan números
if (Char.IsDigit(e.KeyChar) || asc(e.KeyChar)==13)
{
e.Handled = false;
}
else
{
if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso
{
e.Handled = false;
}
else
{
//el resto de teclas pulsadas se desactivan
e.Handled = true;
}
}
}
答案 4 :(得分:0)
如果要使用回车键提交更改,假设您要更新数据绑定,但保留在控件中,则可以使用以下代码
private void TextBox_KeyPress(object sender, EventArgs e)
{
if(e.KeyCode == (char)Keys.Enter)
{
TextBox.DataBindings[0].WriteValue();
dataBindingSource.ResetCurrentItem();
TextBox.Select(TextBox.Text.Length, 0);
e.Handled = true;
}
}
WriteValue()的重要部分是在数据绑定事件触发之前提交更改。如果您希望在提交更改后在表单上更新其他控件,则ResetCurrentItem()将执行此操作。此外,此代码只提交第一个绑定值,但如果您有多个绑定,则可以使用foreach循环和WriteValue()全部或其他任何步骤来逐步执行它们。按下回车键后,TextBox.Select()行只会将光标保持在离开它的位置。