Winforms 如何在winform上获取文本更改的输入

Winforms 如何在winform上获取文本更改的输入,winforms,Winforms,我想等待winform上的用户输入。不使用文本框或其他控件。只是表单本身处理输入。 我尝试将KeyPress和TextChanged事件添加到表单中,但都没有成功。我做错了什么 谢谢:)如果您想在表单上处理键盘输入: 为Form.KeyPress-event创建事件处理程序 设置属性KeyPreview=true(例如通过设计器) 然后在按键之前,确保窗体已聚焦 关于TextChanged事件: 从MSDN: 如果文本属性被更改,则引发此事件 编程修改或用户交互 因此,至少在表单初始化时,

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


谢谢:)

如果您想在
表单上处理键盘输入

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

关于
TextChanged
事件:

从MSDN:

如果文本属性被更改,则引发此事件 编程修改或用户交互

因此,至少在表单初始化时,当更改
.Text
属性时,必须引发
TextChanged
事件。当然,每次将此属性更改为:
\u myForm.Text=“我的新表单”

在您的案例中,
TextChanged
事件未引发,因为(我假设)事件处理程序是在调用
InitializeComponent()
方法之后添加的。其中调用了(C#)
this.Text=“MyForm”


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

button1.Click += button1_Clicked;
当您直接在Form1.cs文件中手动键入所单击按钮(object sender,EventArgs e)的签名时,这是不会发生的神奇


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

显示一些代码。是否有任何控件将焦点放在表单上?没有代码可显示。我使用设计师的通用代码。你说的“设计师的通用代码”是什么意思?唯一的代码是你编写的代码。它将为你制定程序,但你必须决定这些程序中会发生什么。恐怕你没有抓住要点。。。将事件添加到控件时,设计器中有通用代码。您将获得实现私有void Screen1_KeyPress(objectsender,KeyPressEventArgs e){}等事件的方法。当然,我需要实现这些方法,但我的问题不是这个。我只是想知道,当我在窗体上而不是在常规控件上实现这些方法时,为什么这些方法不起作用。您可以添加一个文本框(multiline=true)并将其停靠以填充容器。如果您只想捕获击键,请尝试在WinForm上设置KeyPreview属性。