ウィンドウハンドルが作成された後にLoad
イベントが発生するはずですが、の前にが実際に表示されることがあります。ほとんどの場合、これは正しいと思われます。しかし、WindowState
プロパティをFormWindowState.Maximized
(VSデザイナーを使用するか、またはコンストラクターでプログラムで設定)に設定してフォームを作成すると、Load
イベントが発生する前にウィンドウが表示されることがわかりました。たとえば、次の順番でWindowStateをMaximizedに設定するのが遅すぎる
using System;
using System.Windows.Forms;
namespace MyApplication
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
WindowState = FormWindowState.Maximized;
}
protected override void OnLoad(EventArgs e)
{
MessageBox.Show("OnLoad - notice that the window is already visible");
base.OnLoad(e);
}
}
}
これは、ウィンドウが表示されている間(Form.Load
イベント中にレイアウトされている)、そのコントロールのサイズが変更されている間、多くの点滅する表示形態を引き起こします。状態を最大化するように設定しなかった場合、ウィンドウが表示される前にすべてのサイズ変更が行われます(これは私が予想したものです)。
Load
イベントが終了するまでWindowState
の設定を保留にすることはできますが、ウィンドウが表示され、すべてのコントロールのサイズが変更されるため、ちらつきが多く発生します。
どのような考えですか?
'こと。 – LarsTech
'Load'イベントでコントロールのサイズを変更することはやや疑わしいです。 'Dock'や' Anchor'プロパティや 'TableLayoutPanel'のような組み込みのコントロールのサイズ変更の仕組みに頼らないのはなぜですか?後で手動でウィンドウのサイズを変更すると、コントロールのサイズも手動で変更されますか? –
私はこれも得ています。私はユーザーセッションの間にフォームをサイズ変更できるように、ユーザーセッション間にWindowStateを保存しています。ユーザーがこれまでに持っていたものに変更して、WindowStateを最大化するとちらつきがたくさんあります。 –