gpt4 book ai didi

forms - .Net CF 防止过度热心、不耐烦的点击(屏幕重绘时)

转载 作者:行者123 更新时间:2023-12-01 07:14:08 26 4
gpt4 key购买 nike

.Net 精简框架

场景:用户在屏幕上。设备找不到打印机并询问用户是否要重试。如果他们单击“否”,则当前屏幕关闭并且他们返回到父菜单屏幕。如果多次点击“否”按钮,第一次点击将被“否”按钮使用,下一次点击将在屏幕重绘完成后生效。 (实际上是单击一个菜单项,然后将用户带到另一个屏幕。)

我看不到放置等待光标的好地方...当用户单击“否”时,除了关闭表单外,没有发生太多事情。但是CF框架重绘屏幕很慢。

有什么想法吗?

最佳答案

您可以通过清除 Windows 消息队列来跳过挂起的点击应用程序.DoEvents();

我们使用以下自定义事件类来解决您的问题(防止多次点击并在必要时显示等待光标):

using System;
using System.Windows.Forms;

public sealed class Event {

bool forwarding;

public event EventHandler Action;

void Forward (object o, EventArgs a) {
if ((Action != null) && (!forwarding)) {
forwarding = true;
Cursor cursor = Cursor.Current;
try {
Cursor.Current = Cursors.WaitCursor;
Action(o, a);
} finally {
Cursor.Current = cursor;
Application.DoEvents();
forwarding = false;
}
}
}

public EventHandler Handler {
get {
return new EventHandler(Forward);
}
}

}

您可以验证它是否适用于以下示例(仅当 HandleClick 已终止时,控制台才输出点击):

using System;
using System.Threading;
using System.Windows.Forms;

class Program {

static void HandleClick (object o, EventArgs a) {
Console.WriteLine("Click");
Thread.Sleep(1000);
}

static void Main () {
Form f = new Form();
Button b = new Button();
//b.Click += new EventHandler(HandleClick);
Event e = new Event();
e.Action += new EventHandler(HandleClick);
b.Click += e.Handler;
f.Controls.Add(b);
Application.Run(f);
}

}

要重现您的问题,请按如下方式更改上述代码(控制台输出所有点击,但有延迟):

        b.Click += new EventHandler(HandleClick);
//Event e = new Event();
//e.Action += new EventHandler(HandleClick);
//b.Click += e.Handler;

Event 类可用于公开 EventHandler 事件(Button、MenuItem、ListView 等)的每个控件。

问候,坦贝格

关于forms - .Net CF 防止过度热心、不耐烦的点击(屏幕重绘时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/153496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com