VC单击按钮弹出对话框都有哪些方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC单击按钮弹出对话框都有哪些方法?相关的知识,希望对你有一定的参考价值。

MFC中,单击一个按钮,弹出一个对话框有哪些方法? 这个按钮的响应函数应该怎么写? 假设要弹出的对话框的类为ConfigDlg, 一种方法为 CConfigDlg Dlg; Dlg.DoModal; 请问还有其他哪些方法?

参考技术A CConfigDlg
*Dlg
=
new
CConfigDlg;
Dlg->Create(这里用你对话框的ID);
Dlg->ShowWindow(SW_SHOW);
这种是非模式显示,就是弹出对话框的同时还可以做其他操作,不过要修改你的对话框类,再窗体销毁的时候delete
this;

单击右上角的关闭(x)按钮后,DOJO 对话框未第二次打开

【中文标题】单击右上角的关闭(x)按钮后,DOJO 对话框未第二次打开【英文标题】:DOJO dialog not opening second time after clicking close(x) button on the upper right corner 【发布时间】:2013-03-13 09:29:02 【问题描述】:

我的页面中有一个名为 EDIT 的对话框按钮。

第一次点击编辑按钮时,弹出编辑窗口。当我通过单击位于弹出窗口右上角的关闭 (x) 按钮关闭弹出窗口并再次单击编辑按钮时,弹出窗口没有出现(打开)。但是在单击位于同一“编辑”弹出窗口下方的“取消”和“应用”按钮并第二次单击“编辑”后,弹出窗口将打开。所以点击关闭按钮后出现问题,不允许我再次打开编辑窗口。

更新:

我发现代码(如下)不允许我第二次打开“编辑”对话框,我对其进行了评论。但是评论代码引起了另一个问题,即当我点击“取消”或“应用”按钮时,它会抛出以下错误,并且不允许我通过抛出相同的错误再次打开“编辑”按钮。

【问题讨论】:

尝试在 jsFiddle 上创建工作示例或仅发布代码的相关部分以获得一些 asnwer... 对不起。我删除了可能不相关的额外 .js 文件。 【参考方案1】:

您在关闭时销毁小部件 (destroyOnClose : true),因此无法在第二次尝试时打开它。

/*
 * Overload the _destroyOrHide method in rmt.NewModalPopup so 
 * that the popup will be destroyed instead of closed. (Close
 * doesn't remove the DOM node.)
 */

【讨论】:

我也尝试更改 (destroyOnClose : false)。即使这样,弹出窗口也没有第二次打开。 您是否单步执行了代码 (_destroyOrHide) 并验证它实际上没有破坏 idget? 当我单击关闭按钮时,甚至没有调用 _destroyOrHide 方法。相反,正在调用名为 close() 的方法。我在主屏幕中提到了方法定义作为更新。【参考方案2】:

在创建对话框之前,请添加以下代码:

if (dojo.byId('displayQualificationPane') != null) 
                        dojo.forEach(dijit.findWidgets(dojo.byId('displayQualificationPane')), function (w) 
                            w.destroyRecursive();
                        );
                    
                    dojo.destroy(dojo.byId('displayQualificationPane'));
                    if (dijit.byId('displayQualificationPane')) 
                        dijit.byId('displayQualificationPane').destroy();
                    

它会在每次创建之前销毁小部件。

【讨论】:

我试过了。不成功。编辑按钮没有第二次打开。 嘿..您需要添加用于销毁小部件的代码(您现在已经评论过)我猜。当您从 (x) 按钮关闭对话框后再次打开对话框时,您遇到了什么错误? 当我尝试再次打开“编辑”对话框时,出现错误“尝试使用 id==editQualificationsApply 注册小部件,但该 id 已注册”。 你能从 firebug 获取那个 (x) 按钮的 id .. 并在使用我共享的代码创建对话框之前将其销毁。【参考方案3】:

另一种技术,类似于 Himani 的建议,但可能更易于使用,是确保在调用 hide 函数后销毁对话框内容。这样,您在初始化组件时不必为此进行任何复杂的检查。

hide: function() 
    this.inherited(arguments);
    window.setTimeout( dojo.hitch( this, 'destroyRecursive' ), 500 );

甚至可能

aspect.after( dialog, 'hide', dojo.hitch( this, function() 
                      setTimeout( function() 
                          dialog.destroyRecursive();
                      , 500 );
              ));

【讨论】:

以上是关于VC单击按钮弹出对话框都有哪些方法?的主要内容,如果未能解决你的问题,请参考以下文章

vc 如何点下按钮弹出一个子对话框并在子对话框上显示图片

MFC中怎么设置单击菜单弹出对话框?

弹出对话框的处理

android 怎样设置单击一个按钮,不会重复弹出dialog

android 怎样设置单击一个按钮,不会重复弹出dialog

MFC单击菜单项如何弹出对话框?