Bud*_*Joe 22 .net c# events visibility winforms
我在加载事件期间将窗体的可见性更改为false并且窗体仍然显示自身.什么是正确的事件来绑定这个.Visible = false; 至?我想实例化Form1而不显示它.
using System;
using System.Windows.Forms;
namespace TestClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*örk 24
无论您在显示表单之前尝试设置Visible属性多少,它都会弹出.据我了解,这是因为它是当前ApplicationContext的MainForm.使表单自动加载但在应用程序启动时不显示的一种方法是更改Main方法.默认情况下,它看起来像这样(.NET 2.0 VS2005):
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Run Code Online (Sandbox Code Playgroud)
如果您改为执行此类操作,应用程序将启动,加载表单并运行,但表单不会显示:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 f = new Form1();
Application.Run();
}
Run Code Online (Sandbox Code Playgroud)
我不完全确定这有用,但我希望你知道; o)
更新:似乎您不需要将Visible属性设置为false,或者提供ApplicationContext实例(将在"引擎盖下"为您自动创建).相应地缩短了代码.
Nic*_*zer 11
我知道这是一个老问题,但我偶然发现了它,并且很惊讶没有人提到过SetVisibleCore
:
bool isVisibleCore = false;
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(isVisibleCore);
}
Run Code Online (Sandbox Code Playgroud)
在该代码段中,只要isVisibleCore
保持为假,表单将保持不可见.如果在实例化表单时将其设置为false,则Visible = false
在"已显示"事件中设置时,您将无法获得短暂的可见性闪烁.
Jos*_*ian 10
我花了一些时间找到一个正常工作的解决方案.
在属性窗口下将名为WindowState的属性设置为Minimized,将ShowInTaskbar设置为False.填写完整的表单后,请在下面的代码行中调用.
this.ShowInTaskbar = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//this.WindowState = System.Windows.Forms.FormWindowState.Normal;
Run Code Online (Sandbox Code Playgroud)
PS:此解决方案在Visual C#2008 Express Edition上进行了测试