【发布时间】:2020-06-26 02:02:06
【问题描述】:
我创建了一个用户控件。这个用户控件有 1 个文本框和 1 个按钮。
我的用户控件
private void textBoxCombo_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
buttonCombo_Click(null, null);
}
private void buttonCombo_Click(object sender, EventArgs e)
{
Execute some tasks!!
}
我有两种形式:父亲形式和继承形式。
父表单代码:Keypreview 设置为 true
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Escape)
e.Handled = true; // stop annoying beep
// call base handler...
base.OnKeyPress(e);
}
private void formBase_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
SelectNextControl(ActiveControl, !e.Shift, true, true, true);
}
继承的表单 - 在我的表单中有 3 个组件:1 个 TextBox、1 个 MyUserControl 和 1 个 ComboBox。
当我继承的表单开始时,光标是文本框中的焦点。如果我按 ENTER,焦点将变为 MyUserControl。如果我再次按 ENTER,焦点将变为 ComboBox。
但是这个组合框将在我的用户控件中填充数据处理。
问题就在这里……
当光标位于我的用户控件的文本框中时。如果我按 ENTER,我的用户控件将执行单击按钮,并且表单会将焦点更改为下一个组件 .. 组合。但是combo在完成按钮单击过程之前获得焦点,然后combo现在没有数据。
如何控制?
【问题讨论】:
-
很难理解是什么问题。您可能需要详细了解哪些情况未按预期工作。此外,没有一些代码可供参考,猜测和更多问题都是关于你可能得到的。我建议至少发布用户控件代码并发布组合框与用户控件的关系。我建议您仔细阅读 SO Help 部分。在这种情况下,How do I ask a good question? 可能有用。
-
"但是combo在完成按钮点击过程之前获得了焦点",这里你说的是哪个按钮点击,回车键按钮?
-
我的用户控件中的按钮。当我在我的用户控件中输入 enter 时执行的相同按钮。
-
做一个测试,看看没有这条线
e.Handled = true;是否可以工作。如果没有那条线它仍然无法工作,我认为formBase_KeyDown不是正确的地方,我认为你想要KeyUp事件。