C#里面MessageBox不能乱用,阻塞和非阻塞,模态对话框和非模态

我一开始以为这个MessageBox跟Delphi里面的ShowMessage是一样的,程序里可以随便放,因为C#里面就TM这一个封装好的弹出对话框提示消息函数,可以直接用的。


结果实习做程序测试被坑爹了,发现我错了,C#这个MessageBox默认是模态对话框,是阻塞的,也就是说你不区点击okNOCancel他一直显示在那里程序里后面的代码是停止的不往后执行,但是主程序仍然会响应其他消息,比如Timer事件,造成时序逻辑混乱。

原来随手写的是这样:

private void ReadOTPDataHandle()
        {
            if (xxxxxx)  //若命令字和地址都正确
            {
                xxxxxxxxxxxx;
            }
            else
            {
		MessageBox.Show("ERROR: communication data verify error!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmdptr = 0; 
                mode = 4;
                comok = 100; 
                Btype = Type.Bu_no_type;
            }
        }


</pre><p></p><pre>

</

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
模态对话框模态对话框是两种常见的对话框形式,它们之间的主要区别在于用户是否能够在对话框弹出的同时继续操作主窗口。 模态对话框是指在对话框打开的同时,主窗口被锁定,用户无法在主窗口上进行任何操作,直到关闭对话框为止。模态对话框通常用于需要用户立即响应的操作,例如提示用户确认某些重要的操作,或者收集用户必要的信息等。 模态对话框是指在对话框打开的同时,主窗口仍然可以被用户操作,用户可以在主窗口上进行其他操作,而不必等待对话框关闭。模态对话框通常用于需要用户在操作过程中同时查看主窗口的信息,或者进行一些较为简单的操作等。 下面是两种对话框的实现方法: 模态对话框的实现方法: ```python from tkinter import * from tkinter import messagebox root = Tk() def show_dialog(): res = messagebox.askyesno(title="提示", message="您确定要删除吗?") if res == True: # 执行删除操作 pass btn = Button(root, text="删除", command=show_dialog) btn.pack() root.mainloop() ``` 在这个例子中,当用户点击“删除”按钮时,程序会弹出一个模态对话框,询问用户是否确定删除操作。在对话框未关闭之前,用户无法在主窗口上进行其他操作。 模态对话框的实现方法: ```python from tkinter import * root = Tk() def show_dialog(): dialog = Toplevel(root) dialog.title("对话框") dialog.geometry("200x100") dialog.transient(root) # 将对话框与主窗口关联 dialog.grab_set() # 将对话框设置为模态 Label(dialog, text="这是一个对话框").pack() btn = Button(dialog, text="确定", command=dialog.destroy) btn.pack() btn = Button(root, text="打开对话框", command=show_dialog) btn.pack() root.mainloop() ``` 在这个例子中,当用户点击“打开对话框”按钮时,程序会弹出一个模态对话框。在对话框打开的同时,主窗口仍然可以被用户操作。对话框和主窗口之间的关系通过`transient`方法进行关联,同时通过`grab_set`方法将对话框设置为模态,确保用户在对话框未关闭之前无法进行其他操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值