【问题标题】:Handling Key Pressed Events + WinForms + Validation + Cancel处理按键事件 + WinForms + 验证 + 取消
【发布时间】:2012-08-27 15:19:11
【问题描述】:

我正在 C# 项目中实现 WinForms 表单。
我的表单是 MDI 表单的子表单。
我的表单包含一个用户控件。
我的用户控件包含一些按钮,包括一个验证按钮和一个取消按钮。

我想实现以下逻辑:

  • 当我的表单处于活动状态并且用户按下回车键时,我希望自动触发验证按钮单击事件。
  • 当我的表单处于活动状态并且用户按下退出键时,我希望自动触发取消按钮单击事件。

如果我的验证和取消按钮不包含在用户控件中,那么我可能会设置表单的 AcceptButton 和 CancelButton 属性。

【问题讨论】:

  • 在控件的 OnLoad 中,您可以使用 FindForm() 获取父窗体,然后设置它的 AcceptButton 和 CancelButton 属性。

标签: winforms validation events keypress


【解决方案1】:

根据 Arthur 在我的第一篇文章的评论中给出的提示,这是我在用户控件的 Load 事件处理程序中编写的代码:

// Get the container form.
form = this.FindForm();

// Simulate a click on the validation button
// when the ENTER key is pressed from the container form.
form.AcceptButton = this.cmdValider;

// Simulate a click on the cancel button
// when the ESC key is pressed from the container form.
form.CancelButton = this.cmdAnnulerEffacer;

【讨论】:

    【解决方案2】:
    1. 从属性中设置你的 from true 的 KeyPreview 属性;

    2. 将 keyDownEvent 添加到您的表单

    3. 在表单的 keyDownEvent 中,包含以下代码行

    代码

     if(e.KeyValue==13)// When Enter Key is Pressed
     {
         // Last line is performing click. Other lines are making sure
         // that user is not writing in a Text box
          Control ct = userControl1 as Control;
          ContainerControl cc = ct as ContainerControl;
          if (!(cc.ActiveControl is TextBox))
              validationButton.PerformClick(); // Code line to performClick
     }
    
     if(e.KeyValue==27) // When Escape Key is Pressed
     {
         // Last line is performing click. Other lines are making sure
         // that user is not writing in a Text box
          Control ct = userControl1 as Control;
          ContainerControl cc = ct as ContainerControl;
          if (!(cc.ActiveControl is TextBox))
              cancelButton.PerformClick(); // Code line to performClick
     }
    

    validationButton 或 cancelButton 是我假设的按钮的名称。你可能有不同的。如果您有不同的名字,请使用您的名字而不是这两个。

    【讨论】:

    • 如果执行任何指令有任何问题,您应该更新。
    • 我已按照 Arthur 在我的帖子的评论中给出的提示进行操作。由于一个原因,我没有遵循您的提示。如果用户在 TextBox 中输入,然后他按下回车键,那么我必须执行测试以不调用 validationButton.PerformClick。
    • 好的。很抱歉,我无法从问题陈述中得到您提到的案例。你的问题解决了吗?
    • 是的。正如 Arthur 所提到的,我已经在我的用户控件的 OnLoad 事件处理程序中添加了一些代码。但是感谢您的帮助。
    • 没关系。你应该分享,接受,我会投票。这将对新来者有所帮助。
    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多