【问题标题】:How to use combobox.Text after Keydown event in Winforms如何在 Winforms 中的 Keydown 事件后使用 combobox.Text
【发布时间】:2012-01-10 11:55:21
【问题描述】:

我正在使用不带下拉菜单的组合框来仅接受文本输入。在 Windows 窗体上,我有一个 OK 按钮,它调用一个使用 combobox.Text 属性的函数。

问题是我想在用户键入内容然后按 ENTER 时调用此函数。我正在尝试处理 KeyDown 事件(我已经尝试了其他具有相同结果的事件),但我发现在触发后 combobox.Text 为空。我希望这样的东西能够理想地工作:

private void cbox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13)
        {
            OK(cbox.Text); 
        }
    }  

为什么在 KeyDown 事件之后会清除 combobox.Text?文本框不会发生同样的问题吗?我几乎绝望了,但我不想在程序中的每个表单上替换这个框大声笑......请指教!

【问题讨论】:

    标签: c# winforms text combobox keydown


    【解决方案1】:

    您的表单上是否有多个 ComboBox?该事件适用于cbox,但您从cbo 获取文本结果。

    我建议将您的代码更改为:

    private void cbox_KeyDown(object sender, KeyEventArgs e)
    {
         if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
         {
              string result = cbox.Text;
         }
    }
    

    【讨论】:

    • 哦,不抱歉,这只是示例中的一个错字,我试图尽可能清楚地说明。只有一个 ComboBox 恐怕以上对我不起作用 - 到调用 OK() 时,cbox.Text 是一个空字符串。
    • 我已经修改了上面的例子。如果将方法 OK() 替换为 string result = cbox.Text; 会发生什么?您是否有任何其他事件作用于 ComboBox 的文本?
    • 我之前在调试时尝试过 - 结果为 null 并且 cbox.Text = "" 就我所见。我认为组合框上没有任何其他事件,文本消失似乎只是出于某种原因发生在 KeyDown 事件上?
    • 有趣! :) 您在 ComboBox 上设置了哪些属性,例如DropDownStyle、AutoComplete 等。
    • 感谢您的提示 - 原来问题是自动完成,我需要将其设置为无,如下所示:social.msdn.microsoft.com/Forums/en-US/winforms/thread/…
    【解决方案2】:

    当按下 Enter 时,ComboBox 会在事件发生前清除文本,因为您设置了 AutoCompleteMode。

    只需将其更改为无。

    cbox.AutoCompleteMode = AutoCompleteMode.None;
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多