2016-12-13 26 views
-4

我overrided形式(System.Windows.Forms.Form中,我將它稱爲Form0)的的CreateParams財產這樣
Overrided的CreateParams不會生效

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams _CreateParams = base.CreateParams; 
     _CreateParams.ExStyle |= (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW); 
     _CreateParams.Parent = IntPtr.Zero; 
     return _CreateParams; 
    } 
} 

此窗口不應該能夠被激活(WS_EX_NOACTIVATE)並且沒有圖標顯示在任務欄(WS_EX_TOOLWINDOW)中。

它工作得很好,當我使用

Application.Run(new Form0()); 

但它並不如我所料,當我使用

Form0.Show() 

我想知道爲什麼和如何使它生效而努力使用Show()

+0

請參閱[區別](http://stackoverflow.com/q/20859048/1997232)。 – Sinatr

+0

可能的重複[Application.Run()和Form.ShowDialog()之間的區別是什麼?](http://stackoverflow.com/questions/2314514/whats-the-difference-between-application-run-and-form -showdialog) –

+0

不確定這些問題中的任何一個如何回答這個問題。問題是,*你在哪裏調用'Form0.Show()'?你想用你的'main'方法來做這件事嗎?如果是這樣,那麼不,那是行不通的。 –

回答

1

您應該禁用窗口的WS_EX_APPWINDOW樣式。您不需要添加WS_EX_TOOLWINDOWWS_EX_NOACTIVATE默認照顧它:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams _CreateParams = base.CreateParams; 
     _CreateParams.ExStyle |= WS_EX_NOACTIVATE; 
     _CreateParams.ExStyle &= (~WS_EX_APPWINDOW); //<---- 
     _CreateParams.Parent = IntPtr.Zero; 
     return _CreateParams; 
    } 
}