【问题标题】:How to get input on textchanged on winform如何在winform上获取textchanged的输入
【发布时间】:2014-01-13 20:00:47
【问题描述】:

我想在 winform 上等待用户输入。不使用文本框或其他控件。只是它自己处理输入的表单。 我尝试将 KeyPress 和 TextChanged 事件添加到表单中,但均未成功。我做错了什么?

谢谢:)

【问题讨论】:

  • 显示一些代码。是否有任何关注表单的控件?
  • 没有代码可显示。我使用设计师的通用代码。
  • “设计者的通用代码”是什么意思 唯一的代码就是您编写的代码。它会为您制定程序,但您必须决定在这些程序中发生什么。
  • 恐怕您错过了重点......当您将事件添加到控件时,设计器会提供通用代码。您将获得实现事件的方法,例如 private void Screen1_KeyPress(object sender, KeyPressEventArgs e) {}。当然我需要实现这些方法,但我的问题与此无关。我只是想知道为什么这些方法在我在表单上而不是在一般控件上实现时不起作用。
  • WinForm 是一个容器,而不是一个控件。您可以添加一个文本框 (multiline=true) 并将其停靠以填充容器。如果您只想捕获击键,请尝试在 WinForm 上设置 KeyPreview 属性。

标签: winforms


【解决方案1】:

根据您的 cmets,听起来您在问为什么双击控件以创建事件处理程序有效,但键入完全相同的方法签名却无效。其原因是设计器生成的代码最终出现在.Designer.cs 文件中。如果你在那里看,你会发现(最终——为表单生成了很多代码......)一行将按钮引发的实际事件链接到它生成的处理程序方法;像这样:

button1.Click += button1_Clicked;

这是直接在 Form1.cs 文件中手动键入 button1_Clicked(object sender, EventArgs e) 的签名时不会发生的魔法。

但我也可能完全误读了您的 cmets/问题。

【讨论】:

    【解决方案2】:

    如果您想在Form 上处理键盘输入:

    • Form.KeyPress 创建一个事件处理程序 - 事件
    • 设置属性KeyPreview = true(例如通过设计器)
    • 然后在按键之前确保Form已经聚焦

    Keyboard input on the Form level

    关于TextChanged事件:

    来自 MSDN:

    如果 Text 属性被任何一个 程序化修改或用户交互。

    所以TextChanged 事件必须至少在表单初始化时引发,当.Text 属性被更改时。当然,每次您将此属性更改为:_myForm.Text = "my new form"
    在您的情况下,TextChanged 事件未引发,因为(我假设)事件处理程序是在调用 InitializeComponent() 方法之后添加的。在哪里调用 (C#)this.Text = "MyForm"

    TextChanged Event

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2012-12-29
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多