我正在尝试实现一个UI,父窗体通过showDialog()加载子窗体。每当我点击子表单之外的任何地方,但在父表单内部时,子表单将被关闭。单击父窗体外的任何位置只会导致正常的“alt-tab”操作。我该怎么做?
答案 0 :(得分:2)
如果表单中没有任何控件(例如,如果您正在查看图片)。然后你就可以抓住鼠标了:
protected override void OnLoad( EventArgs e )
{
base.OnLoad( e );
this.Capture = true;
}
之后,如果点击位于表单之外,您只需签入OnMouseDown即可。
其他,可以使用
protected override void WndProc(ref Message m)
{
if ( m.Msg==0x86 && (int)m.WParam==0 )
if ( this.DialogResult==DialogResult.None )
this.DialogResult = DialogResult.OK;
base.WndProc (ref m);
}
它在Windows XP中运行良好,但在Windows 7中它听起来也是哔哔声,我还没有调查原因。
答案 1 :(得分:0)
我需要同样的行为。
当我的应用程序启动时,会显示一个广告表单,并且只要用户单击主表单就必须关闭该表单。
基于WM_SETCURSOR消息,这里是我的解决方案(放入主窗体):
protected override void WndProc(ref Message m)
{
var vanishingDialog = ActiveForm as IVanishingDialog;
//0x0201FFFE is for : 0201 (left button down) and FFFE (HTERROR).
if ((m.Msg == 0x20) && (m.LParam.ToInt32() == 0x0201FFFE) && (vanishingDialog != null))
{
vanishingDialog.Vanish();
}
else
{
base.WndProc(ref m);
}
}
我的广告对话框(或者您想要看到的任何内容在点击主窗体时消失)将实现此界面:
public interface IVanishingDialog
{
/// <summary>
/// Closes the dialog box.
/// </summary>
void Vanish();
}
在七点钟上工作就像一个魅力(没有哔哔声)。
我只需要以一种方式改进它: 当用户单击主窗体中的按钮时,广告窗体关闭但未按下按钮。 我必须转换并发送新消息。