私は問題があります。ウィンドウの読み込み時にウィンドウを非表示にする必要があります。しかし
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() を呼び出すだけです。
以下が使えるようです。
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()
後で呼び出されるので、問題を修正してください。
使用する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.
これは、このイベントの後までウィンドウが実際に存在しないためだと思います。これを行うのに最適な場所は、フォームの外です。
if (x == 1)
{
form1.ShowForm();
}
else
{
// Don't show the form
}
フォーム自体の中で本当にそれを行う必要がある場合は、Activated イベントを使用する必要があると思います。
編集:
次のようなものを試すこともできます。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 myform = new Form1();
if (myform.CheckStuff())
{
Application.Run(myform);
}
}
Shown イベントで Hide() を呼び出すと、Hide() は Visible を false に設定するだけで、フォームが表示される前に Visible プロパティは既に false になっています...
ウィンドウを非表示にするために使用this.Hide()
します。this.Close(
) 閉じる