我想在VBA 7.0中创建一个无模式弹出对话框.到目前为止,最有希望的路线似乎是CreateDialog.
首先我尝试CreateDialogW并收到了Entry point not found for CreateDialogW in DLL.
打开DLL后,我验证了此功能未列出.上面链接的MSDN参考显示User32作为此函数的DLL并列出函数名称CreateDialogW和CreateDialogA(Unicode/ansi),但它们未在我的计算机上的此DLL中列出(Win 7 professional,64bit).
所以,看的是功能列表是在DLL中,我看到的CreateDialogParam和CreateDialogIndirectParam函数(每ANSI和Unicode版本).
我一直在尝试遵循MSDN并将C示例转换为VB,但我在某处遗漏了某些东西而且我有点卡住,因为我不知道我做错了什么.代码编译并运行没有错误,但API调用没有任何反应 - 它执行但没有任何反应.
如果有人能给我一些正确方向的指示,我将非常感激.我当前的解决方法很糟糕,我真的很想按下这个项目.
Option Explicit
'Reference conversion of C to VB type declarations here
'http://msdn.microsoft.com/en-us/library/aa261773(v=vs.60).aspx
'Declare function to Win API CreateDialog function
'http://msdn.microsoft.com/en-us/library/ms645434(v=vs.85).aspx
Private Declare PtrSafe Function CreateDialog Lib "User32.dll" Alias "CreateDialogParamW" _
(ByVal lpTemplateName As LongPtr, _
ByRef lpDialogFunc As DIALOGPROC, _
ByVal dwInitParam As Long, _ …Run Code Online (Sandbox Code Playgroud) 我总是很难记住模态或无模式对话框是否是应用程序其他部分中的阻塞操作.
有谁知道为什么他们被这样称呼?
如何创建无模式MessageBox?我是否必须创建自己的Windows窗体类并使用它?如果是这样,是否有一种简单的方法可以添加警告图标(而不是插入我自己的图像)并根据文本量调整大小?
我想通过使一些表格无模式来使我的VB.NET应用程序更好用.
我想我已经想出如何使用dlg.Show()和dlg.Hide()而不是调用dlg.ShowDialog().我在我的主申请表中有一个无模式对话框的实例:
Public theModelessDialog As New dlgModeless
Run Code Online (Sandbox Code Playgroud)
启动我打电话的无模式对话框
theModelessDialog.Show()
Run Code Online (Sandbox Code Playgroud)
而确定和取消按钮处理程序中的dlgModeless我
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Hide()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Hide()
End Sub
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
不过,右上角的"X"按钮让我感到高兴.当我用那个按钮关闭表单时,然后尝试重新打开表单,我明白了
ObjectDisposedException未处理.无法访问已处置的对象.
我觉得我大部分都在那里,但我无法弄清楚如何做以下任何一种情况:
有任何想法吗?
这个对话框的类是System.Windows.Forms.Form.
有没有办法创建一个无模式在C++ MFC中对话框,它始终位于应用程序中的其他窗口之上?我认为有点像Visual Studio 2005中的查找对话框 - 它保持在顶部,但您仍然可以编辑基础文本.
(如果它有任何区别,它不是MDI;它是一个基于对话框的应用程序)
有没有办法显示无模式对话框 - 一个允许用户在对话框之前与屏幕上的内容进行交互的对话框,但是如果按下该对话框还允许用户与对话框进行交互?
我知道Toasts,但他们不允许与弹出窗口进行交互.
我知道Dialogs,但它们是模态的,不允许与后台交互.
我知道通知,但我想要一些在屏幕上可见的内容.
我基本上希望能够玩游戏或其他东西,弹出窗口显示我有新的电子邮件或其他东西.我可以点击它查看我的电子邮件,但如果我只想继续玩我的游戏,我可以等它消失.这在Android中可行吗?
我在类的方法中创建了一个无模式的qdialog:
//Test.cpp
QDialogMaintenance *diag = new QDialogMaintenance(this);
diag->show();
diag->raise();
diag->activateWindow();
Run Code Online (Sandbox Code Playgroud)
我只需单击对话框中的"X"图标即可关闭对话框.如何删除test.cpp中的"diag"实例?
将VBA中的ProgressBar UserForms显示为模态还是无模式更好?在VBA中制定进度指标的最佳做法是什么?
无模式UserForms需要使用Application.Interactive = False,而Modal UserForms本质上阻止与应用程序的任何交互,直到核心过程完成或被取消.
Application.Interactive = False但是,如果使用了,则Esc键会中断代码执行,因此在UserForm和调用过程中都需要使用Application.EnableCancelKey = xlErrorHandler和错误处理(Err.Number = 18).
资源密集型调用程序也能导致CommandButton_Click和UserForm_Activate在无模式用户窗体哑火事件.
通常,使用模态UserForms的进度指示器似乎更简单,因为正在执行的代码完全包含在UserForm模块中,并且不需要传递变量.
但是,对于进度指示器使用模态UserForms的问题是,每个需要进度指示器的过程都需要单独的UserForm模块,因为调用过程必须在UserForm_Activate过程中.
因此,虽然在无模式UserForm中可以有一个可重用的进度指示器,但它比在多个模态UserForms中执行代码的可靠性低.
哪种方式更好?
谢谢!
我想在屏幕上显示一个无模式对话框并在其中显示一些信息.
但是,如果我按照以下方式使用它,它有一些问题:
function()
{
showdialog(XXX).
//heavy work.
update the dialog..
//heavy work.
update the dialog...
}
Run Code Online (Sandbox Code Playgroud)
似乎显示了对话框,但它不会在其中绘制任何信息.它只在函数结束时绘制所有信息.
如何修改无模式对话框以便立即显示信息?
我从WinForms窗口启动的WPF表单显示,当它作为无模式对话框启动时,所有文本框都是不可编辑的.它是一个模态窗口时效果很好.我仍然可以输入空格或粘贴文本.但常规打字不起作用.我正在使用3.5 SP1.有人知道如何解决这个问题吗?