2015-08-17 22 views
-1

我需要一個隱藏窗體,顯示控制檯作爲用戶界面(不要問爲什麼,我不需要其他方法)。所有的方法都是在表單類中。無法隱藏表單。在窗體構造函數完成後出現窗口

因此,我使用控制檯輸出創建了Windows窗體項目。一切正常,但我不能隱藏窗體。

啓動形式:

static void Main() { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

這裏是形式的構造:

public Form1() { 
      InitializeComponent(); 
      this.Visible = false; 
      //here i try to find one other window by caption 
      //using FindWindow() WinAPI method 
      this.Text = "Generated window title"; 
      //find handle of this window: 
      int currentWindowHandle = (int)FindWindow(null, title); 
      //after this moment form is again visible 
     } 

要隱藏表單我使用此代碼:

protected override void SetVisibleCore(bool value) { 
      if (!this.IsHandleCreated) { 
       value = false; 
       CreateHandle(); 
      } 
      base.SetVisibleCore(value); 
     } 

形式開始隱藏,但之後的構造完成,它再次可見。

我想它會發生什麼確切的時間弄清楚:

protected override void WndProc(ref Message m) { 
      Debug.WriteLine(m.Msg); 
      base.WndProc(ref m); 
     } 

我得到這個作爲輸出:

//waited a while 
... 
24 x0018 = SHOWWINDOW 
528 x0210 = PARENTNOTIFY 
14 x000E = GETTEXTLENGTH 
13 x000D = GETTEXT 
70 x0046 = WINDOWPOSCHANGING 

在此之前,我已經得到很多次消息13,14,70。當我得到最後70 msg後,出現base.WndProc(ref m);窗口。

搜索的消息的解釋:

的ShowWindow = 0x0018處

當窗口即將被隱藏或顯示的WM_SHOWWINDOW消息被髮送到的窗口。

PARENTNOTIFY = 0x0210

時創建子窗口或毀壞,或當用戶點擊一個鼠標按鈕,而光標在子窗口的WM_PARENTNOTIFY消息被髮送到一個子窗口的父。當創建子窗口時,系統在創建窗口返回的CreateWindow或CreateWindowEx函數之前發送WM_PARENTNOTIFY。當子窗口被銷燬時,系統在任何處理之前發送消息以銷燬窗口。

當然,有些東西不讓我保持這個窗口隱藏?我不明白。我不會發送任何消息給這個應用程序。我只是運行它,看看。

回答

-1

而在所有這些我找到了替代解決方案。

也許這對社區毫無用處。但有人可以遇到同樣的問題,所以我會發布它。如果這個問題得到-5我會刪除它。

你可以:

this.WindowState = FormWindowState.Minimized; 
    this.ShowInTaskbar = false; 

奇蹟,爲什麼有時不工作:

this.Visible = false; 
+1

你發現你的答案在同一時間,你問了一個問題:) –

+0

這仍然會的Alt + Tab顯示很遺憾。 –

0

你可以簡單地使用this.Hide()

public Form1() { 
     InitializeComponent(); 
     this.Hide(); 
    } 
0

試試這個可能這可以幫助您解決你的問題

Form1 frm = new Form1; 
frm.Hide(); 

或者

frm.visible = false;