7

ウィンドウハンドルが作成された後、ウィンドウが実際に表示される前にLoad、イベントが発生するはずだと読みました。ほとんどの場合、これは真実のようです。ただし、(VS デザイナーを介して、またはコンストラクターでプログラムによって)プロパティを設定してフォームを作成すると、イベントが発生する前にウィンドウが表示されることがわかりました。例えば:WindowStateFormWindowState.MaximizedLoad

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) のサイズが変更されている間、表示されているフォームがちらつきます。状態を最大化するように設定しなかった場合、ウィンドウが表示される前にすべてのサイズ変更が行われます (これは私が期待していたことです)。

WindowStateイベントが終了するまで の設定を保留することもできますLoadが、それでもウィンドウが表示され、すべてのコントロールのサイズが変更されるため、多くのちらつきが発生します。

何かご意見は?

4

4 に答える 4

2

最初の Activated イベントが発生するまで WindowState の変更を遅らせるようにしてください。これは、VS2005 およびフレームワーク 2.0 を使用する VB.NET で機能します。

于 2013-12-22T10:09:56.587 に答える
1

Load イベントに診断メッセージを入れる必要がある場合は、System.Diagnostics.Debug.WriteLine(); を使用します。
MessageBox を使用すると、イベントの通常の流れの順序が崩れます。

protected override void OnLoad(EventArgs e)         
{             
     System.Diagnostics.Debug.WriteLine("onLoad");              
     base.OnLoad(e);         
} 

この投稿では、詳細について説明します

于 2012-03-21T14:54:43.617 に答える
0

ウィンドウの外観を変更する (サイズ変更など) と、ウィンドウが表示されます。

.Hide()または.Visible = Falsector で呼び出して、.Load の最後に再度表示することができます。

于 2012-03-21T14:33:07.953 に答える