0

已解决:你们是最棒的!我把 al 的内容goyouidiot_Click做成了一个名为 的方法displayResult,然后:

 private void t1_TextChanged(object sender, EventArgs e)
       {
        displayResult();
       }

我以前怎么没想到?大声笑,谢谢

这是原始消息:

不久前,我构建了一个小软件,可以计算 15 个数字的平均值。单击按钮时代码开始运行,但我想将此代码放在开始与程序一起运行的无限循环中,因此答案将自动更新。这是我的代码:

private void goyouidiot_Click(object sender,

事件参数 e) { . . . . }

以及那些不明白的人:

我有 15 个文本框,我希望在文本框的内容更改时运行该方法。

4

4 回答 4

9

而不是制造一个无限循环(这将导致应用程序挂起,除非它在后台线程上 - 一个更大的蠕虫罐)你应该只响应更改事件。

如果您的数字在文本框中被更新,只需将它们每个的 TextChanged 事件绑定到您的goyouidiot_Click方法 - 然后您应该重命名。

编辑

正如 Eric 在他的回答中指出的那样,这些事件起作用的原因是因为实际上在后台有一个无限循环来监听变化 - Windows 消息泵。Run当您在应用程序上调用该方法时,将启动此循环。

于 2010-07-13T13:39:26.453 回答
3

您认为必须涉及无限循环的直觉是正确的。但是您不想自己编写该循环;运行时库已经为您编写好了。您要阅读的是事件驱动编程。找一个好的介绍,比如,说:

http://www.c-sharpcorner.com/UploadFile/sksaha/EventsinNet11152005043514AM/EventsinNet.aspx

事件驱动编程在幕后工作的方式是有一个无限循环的代码来监视来自操作系统的消息队列的状态。这些消息代表诸如鼠标单击和键入之类的内容。然后无限循环代码将这些消息转换为事件触发。当特定事件发生时,您可以监听这些事件触发并运行代码。

于 2010-07-13T13:55:20.857 回答
2

将其置于无限循环中可能会使系统耗尽 CPU 能力,这意味着您需要引入暂停 ( Thread.Sleep)。

如果你使用暂停,你也可以使用一个Timer对象——有基于表单Timer或基于线程的TimerSystem.Windows.Forms, 或System.Threading/ System.Timers);

我个人建议使用计时器以所需的时间间隔打勾。

线程计时器使用委托/线程池,而基于表单的计时器将消息放在消息泵上 - 由于创建滴答的方式的开销,两者都不能保证准确到它们的间隔。

于 2010-07-13T13:39:18.170 回答
0

如果我理解正确(你想在你的 Winform 应用程序中每 15 分钟更新一次),那么最好使用Timer类,它会定期运行你的代码。

编辑:如果您想在其中一个文本框中更改文本时执行一些计算,您应该在这些文本框的TextChanged事件的事件处理程序中执行此操作(您希望为每个文本框分配相同的处理程序)

于 2010-07-13T13:40:09.917 回答