我有一个带有一个表单的应用程序,在Load方法中我需要隐藏表单.
表单将在需要时显示自己(按照outlook 2003样式弹出框的思路),但我可以'弄清楚如何在没有杂乱的情况下隐藏表单.
有什么建议?
我想在启动时隐藏我的应用程序的主窗口,所以我把它放在构造函数中:
this.Hide();
Run Code Online (Sandbox Code Playgroud)
这并不掩盖我的形式.看起来我只能通过按钮来隐藏表单.我在这里做错了吗?
我有一个出现在系统托盘中的C#WinForms应用程序.应用程序在加载时隐藏主窗体:
private void MainForm_Load(object sender, System.EventArgs e)
{
Hide();
}
Run Code Online (Sandbox Code Playgroud)
对于相同的主窗体,我覆盖了WndProc以捕获自定义窗口消息(该消息通过RegisterWindowMessageWin32 API调用注册到Windows ).
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYCUSTOM_MESSAGE)
{
// Handle custom message
}
}
Run Code Online (Sandbox Code Playgroud)
从外部C++应用程序,我正在使用PostMessage广播相同的自定义窗口消息.
UINT msg = RegisterWindowMessage(L"WM_MYCUSTOM_MESSAGE");
PostMessage(HWND_BROADCAST, msg, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
当我在首次启动C#应用程序后执行上面的代码时,它不会进入WndProc.显示主窗体后(通过双击系统托盘图标,实质上是一个Show()),捕获广播消息可以工作并在隐藏窗体后继续工作Hide().
任何人都可以解释为什么它Hide()在MainForm_Load事件处理程序中的第一个之后不起作用?我是否过早隐藏表格?
EDIT1:好像它与加载时隐藏无关.即使没有最初的隐藏,我的主要形式WndProc只会在隐藏并重新显示之后开始接受广播帖子...