显示 MessageBox 时如何防止 Form 最大化?
How to prevent the maximizing of a Form when a MessageBox is shown?
情况
我有一个表格
MyMainForm.Show()
它有一个未显示模态的子表单
// Not modal, owner is MyMainForm
SubForm.Show(MyMainForm);
用户 minimizes
SubForm 并与 MyMainForm 交互,然后显示一个 MessageBox。
// SubForm is still opened, but minimized
// Owner is MyMainForm (same like the opened SubForm)
MessageBox.Show(MyMainForm, "Any message", ...);
问题
用户没有点击 MessageBox,而是 maximizes
SubForm。
由于 MessageBox 仍处于打开状态(具有相同的所有者!),SubForm 不接受任何输入并且应用程序似乎冻结。
问题
当显示具有相同所有者的 MessageBox 时,如何防止 SubForm 最大化?
(无法将 MessageBox 绑定到 SubForm)
什么不起作用
我试图通过收听 Windows 消息来识别最大化。但是当显示 MessageBox 时,没有发送 Windows 消息!
public partial class SubForm : Form
{
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
// Works well, except when the MessageBox is shown
// then no appropriate message is sent
...
}
}
}
如果我没有正确理解你的问题,那么我会尝试以这种方式处理 SubForm 上的 Resize 事件
void onResize(object sender, EventArgs e)
{
if(!this.CanFocus)
this.WindowState = FormWindowState.Normal;
}
当从所有者窗体显示模态消息框时,这种方法似乎可以处理子窗体的重新激活。当然,确切的可用性取决于子表单的默认大小有多大。它仍然可以覆盖 MessageBox 位置。但是您仍然可以在同一个 onResize 事件处理程序中处理修改子表单的 Location 和 Size 属性,或者尝试使用 Jimi
下面的评论中解释的解决方法
情况
我有一个表格
MyMainForm.Show()
它有一个未显示模态的子表单
// Not modal, owner is MyMainForm
SubForm.Show(MyMainForm);
用户 minimizes
SubForm 并与 MyMainForm 交互,然后显示一个 MessageBox。
// SubForm is still opened, but minimized
// Owner is MyMainForm (same like the opened SubForm)
MessageBox.Show(MyMainForm, "Any message", ...);
问题
用户没有点击 MessageBox,而是 maximizes
SubForm。
由于 MessageBox 仍处于打开状态(具有相同的所有者!),SubForm 不接受任何输入并且应用程序似乎冻结。
问题
当显示具有相同所有者的 MessageBox 时,如何防止 SubForm 最大化?(无法将 MessageBox 绑定到 SubForm)
什么不起作用
我试图通过收听 Windows 消息来识别最大化。但是当显示 MessageBox 时,没有发送 Windows 消息!
public partial class SubForm : Form
{
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
// Works well, except when the MessageBox is shown
// then no appropriate message is sent
...
}
}
}
如果我没有正确理解你的问题,那么我会尝试以这种方式处理 SubForm 上的 Resize 事件
void onResize(object sender, EventArgs e)
{
if(!this.CanFocus)
this.WindowState = FormWindowState.Normal;
}
当从所有者窗体显示模态消息框时,这种方法似乎可以处理子窗体的重新激活。当然,确切的可用性取决于子表单的默认大小有多大。它仍然可以覆盖 MessageBox 位置。但是您仍然可以在同一个 onResize 事件处理程序中处理修改子表单的 Location 和 Size 属性,或者尝试使用 Jimi
下面的评论中解释的解决方法