今天就来唠唠这个。说起来这玩意儿,我刚开始接触那会儿,还真踩过坑,现在想想都觉得挺有意思的。
那时候我刚上手做点窗口程序,就是那种带按钮、能点点点的。有个需求挺常见的,就是点一个按钮,弹个确认框出来,问用户“你确定要这么干吗?”,比如删除个啥东西之类的。当时觉得简单,拖个按钮,写个点击事件,弹个MessageBox就完事。
我就直接用那个,它不是有好几种重载嘛我就选那个带“确定”和“取消”按钮的。代码大概就是这样,点删除按钮,然后*("确定要删除吗?", "提示", *)
。弹窗是出来,看着也像那么回事。
关键问题来,我当时想当然地以为,只要弹这个框,用户点“确定”,后面的删除代码就自动执行。结果?我发现不对劲,不管用户点“确定”还是“取消”,甚至点右上角的叉叉关掉,我写在后面的删除代码总会执行!这下可把我搞懵,这不就等于没确认嘛点一下按钮,不管三七二十一就删,那还弹个啥框。
后来我就开始琢磨,这个执行完之后,肯定得告诉我用户点哪个按钮。不然我程序咋知道用户是同意还是反悔?我就去查查,或者说,瞎试试。发现这玩意儿,它是有个返回值的!返回的就是一个叫DialogResult
的类型。
这下思路就清晰。我得先用一个变量接住这个返回值,像这样:
DialogResult result = *("确定要删除吗?", "提示", *);
然后,我得判断这个result
变量的值到底是如果用户点“确定”按钮,那这个result
的值就是。我的删除代码,不能直接写在后面,而是要写在一个if
判断里面:
if (result == *) {
// 这里才是真正执行删除操作的代码
// 比如:删除文件、删除数据啥的
这么一改,立马就对!点删除,弹框,点“确定”,东西没;点“取消”或者关掉框,啥事没有,数据还在。这逻辑才对嘛
后来做复杂点的功能,需要自己设计弹窗(不是用MessageBox,而是自己做个小Form),原理也是一样的。在那个自定义的小窗口里放上“确定”、“取消”按钮。给“确定”按钮设置DialogResult = *
,给“取消”按钮设置DialogResult = *
。然后在主窗口里调用这个小窗口的ShowDialog()
方法,同样用一个变量接收返回值,再判断是不是,决定要不要执行接下来的操作。
MyCustomDialogForm dialog = new MyCustomDialogForm();
if (*() == *) {
// 用户在自定义窗口里点确定
// 获取自定义窗口里的数据,然后干活
} else {
// 用户点取消或者关闭
// 啥也不干,或者给个提示
这个看着简单,是窗口程序里处理用户交互,特别是确认操作的一个核心环节。关键就是要记住,ShowDialog()
或者类似的弹出确认框的方法,它的返回值非常重要,一定要接住并且判断,根据判断结果来决定程序的下一步走向。不然就容易出逻辑错误,像我一开始那样,不管用户点啥都执行,那就尴尬。
今天就先分享这点实践心得,希望能帮到可能也遇到类似情况的朋友。