我遇到問題。我需要在窗口加載時隱藏我的窗口。但是this.Visible在Windows窗體中不起作用
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
不起作用。而財產Visible
仍然如此。我錯過了什麼嗎?
我遇到問題。我需要在窗口加載時隱藏我的窗口。但是this.Visible在Windows窗體中不起作用
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
不起作用。而財產Visible
仍然如此。我錯過了什麼嗎?
是, Visible屬性在Windows窗體中是一個大問題,這就是實際得到的句柄創建並導致OnLoad()運行,換句話說,該窗口在它可見之前不存在,並且它將忽略嘗試撤銷該操作。
想要繼續創建句柄,但是如果使用NotifyIcon不會使窗口可見,這是很常見的。您可以通過覆蓋SetVisibleCore實現這一點:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
value = false;
CreateHandle();
}
base.SetVisibleCore(value);
}
當心的OnLoad仍然無法運行,直到窗口實際上變得可見,所以如果需要移動代碼到構造。只需在NotifyIcon的上下文菜單事件處理程序中調用Show()以使窗口可見即可。
使用this.Hide()
隱藏您的窗口。 this.Close(
)要關閉
我相信這是因爲該窗口直到此事件發生後才真正存在。要做到這一點,最好的地方就是形式外:
if (x == 1)
{
form1.ShowForm();
}
else
{
// Don't show the form
}
如果你真的需要做的形式本身裏面,那麼我認爲你需要使用激活事件。
編輯:
您也可以嘗試這樣的:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 myform = new Form1();
if (myform.CheckStuff())
{
Application.Run(myform);
}
}
使用this.Opacity = 0;
我想是不是設置從窗體的Load事件可視性好主意。相反,我會通過添加公共方法來實現:
public void LoadForm(...)
{
// do the all the initializations
}
並調用該方法來加載表單。該形式應該是不可見的,除非你明確地表現出來:
MyForm instance = new MyForm();
instance.LoadForm(...);
// instance.Show(); or ShowDialog() for dialog form not sure exactly the syntax.
但是,這是我的主要形式如何使用這種語法來控制它? – Barun 2010-09-18 17:45:18
看來你可以使用以下命令:
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
this.ShowInTaskbar = false;
}
我只是測試它的WinForms應用程序和它的工作。
(也剛剛發現這一點:Single Form Hide on Startup
把你的電話在Windows事件循環是這樣的:
WindowsFormsSynchronizationContext.Current.Post((obj) => this.Hide(), null);
所以Hide()
將在以後調用,從而解決您的問題
在顯示的事件中調用Hide(),Hide()只設置Visible爲false,並且在顯示錶單之前,Visible屬性已經是false ...
ok。但可見性有什麼問題? – Barun 2010-09-18 17:35:19
this.Hide不會在_Load事件中工作 – 2010-09-18 17:36:49