我遇到问题。我需要在窗口加载时隐藏我的窗口。但是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