【问题标题】:Press enter in textbox to and execute button command在文本框中按回车键并执行按钮命令
【发布时间】:2013-11-27 08:14:15
【问题描述】:

我想通过按 Enter 来执行搜索按钮后面的代码。我的搜索按钮有 Accept Button 属性。但是,当我将按钮设置为不可见时,我的搜索不会执行。

我希望能够在我的文本框中按 Enter 并在按钮不可见时执行它。任何建议都会很棒!以下是我在 KeyDown 事件中的代码的一次尝试

if (e.KeyCode == Keys.Enter)
    {
        buttonSearch_Click((object)sender, (EventArgs)e);
    }

【问题讨论】:

  • 看不到是什么意思?
  • 以上是我尝试过的。当我的 Button 属性设置为不可见时。
  • 我想在其可见属性设置为 False 时执行我的按钮。
  • 是什么UI技术? Winforms?

标签: c# winforms button textbox


【解决方案1】:

你可以注册到Textbox的KeyDown-Event,看看按下的键是不是Enter,然后执行按钮的EventHandler:

private void buttonTest_Click(object sender, EventArgs e)
{
    MessageBox.Show("Hello World");
}

private void textBoxTest_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        buttonTest_Click(this, new EventArgs());
    }
}

【讨论】:

  • 完美运行!仅供参考,确保您的“AcceptButton”设置设置为无。当我的 AcceptButton 设置为我的按钮时,我使用了此代码,但它不起作用。我的工作很糟糕。谢谢大家!!
  • 此外,您可以将e.Handled 设置为true 以避免发出哔哔声。
  • 嘿,按钮Test_Click 的byval 中的this 是什么?我已经尝试在 VB.NET 中实现您的代码,但不确定这意味着什么。
【解决方案2】:

或者,您可以设置表单的 .AcceptButton 属性。 Enter 会自动创建点击事件。

this.AcceptButton = this.buttonSearch;

【讨论】:

  • 是的,这可行,但必须为此制作一个额外的按钮并收听ButtonOnClick
【解决方案3】:

您可以处理TextBox 控件的keydown 事件。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if(e.KeyCode==Keys.Enter)
    buttonSearch_Click(sender,e);
}

即使按钮Visible 属性设置为false,它也可以工作

【讨论】:

    【解决方案4】:

    既然大家都覆盖了KeyDown的答案,那么在按钮上使用IsDefault怎么样?

    您可以阅读此提示以快速了解操作方法及其作用:http://www.codeproject.com/Tips/665886/Button-Tip-IsDefault-IsCancel-and-other-usability

    这是链接文章中的一个示例:

    <Button IsDefault = "true" 
            Click     = "SaveClicked"
            Content   = "Save"  ... />
    '''
    

    【讨论】:

    • 这是(在我看来)最好的方法,特别是如果您试图坚持 MVVM 原则,因为它只涉及向 XAML 添加一行。但我认为可以通过添加一个简短的示例来改进这个答案(该链接有一天会消失!)。
    • 其他解决方案有效,但似乎浪费资源而此解决方案无效。有人可以告诉我如何在 WinForms(CS 文件)中执行此操作吗?找不到 XAML 文件
    【解决方案5】:

    如果您只是在按下 Enter 时单击按钮,那该怎么办?

    private void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                buttonSearch.PerformClick();
            }
    

    【讨论】:

      【解决方案6】:

      在某些情况下,文本框无法处理回车键。我认为可能是当您在表单上设置了接受按钮时。在这种情况下,您应该使用 textbox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 而不是 KeyDown 事件

      【讨论】:

        【解决方案7】:
            private void textbox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    //cod for run
                }
            }
        
            private void buttonSearch_Click(object sender, EventArgs e)
            {
                textbox1_KeyDown(sender, new KeyEventArgs(Keys.Enter));
            }
        

        【讨论】:

          【解决方案8】:

          WPF 应用程序中此代码完美运行

          private void txt1_KeyDown(object sender, KeyEventArgs e)
            {
               if (Keyboard.IsKeyDown(Key.Enter) )
                   {
                        Button_Click(this, new RoutedEventArgs());
                   }
             }
          

          【讨论】:

            【解决方案9】:

            你去。

            private void YurTextBox_KeyDown(object sender, KeyEventArgs e)
                {
                    if (e.KeyCode == Keys.Enter)
                    {
                        YourButton_Click(this, new EventArgs());
                    }
                }
            

            【讨论】:

            • 您好,欢迎来到 SO!请务必稍微解释一下您的源代码。
            【解决方案10】:

            如果 buttonSearch 没有代码,并且唯一的操作是返回对话框结果,那么:

                private void textBox1_KeyDown(object sender, KeyEventArgs e)
                {
                    if (e.KeyCode == Keys.Enter)
                        DialogResult = DialogResult.OK;
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-05-12
              • 2013-11-18
              • 1970-01-01
              • 2010-12-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-17
              相关资源
              最近更新 更多