|
分類:[C#]
こんにちは、何度かお邪魔してます。ヤモリです。
C#VS2008SP1です
コンストラクタで最大化したのちSplitContainerのSplitterDistanceを変更しました。以下にソースを示します。 デザイナは、プロジェクト新規作成でフォームアプリケーションを作成した直後にsplitContainerを突っ込んでイベントハンドラを追加しただけです。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent();
WindowState = FormWindowState.Maximized;//a splitContainer1.SplitterDistance = 100;//b }//c
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e) { int a = 3;
a = a * 3;//d } } }
ブレークポイントで追うとabdcdとなってしまいます。
aをコメントアウトした場合、bdc。 aもbもコメントアウトすると、cとなります。
思うに、aで最大化されたときに自動調整によりsplitterの位置が変更されるべきなのに、その処理がコンストラクタをでてからになっているようです。
僕としては、splitContainer1_SplitterMoved内でそのイベントが初期化(最初のab)によって生じたものかどうか区別するかそのイベントが生じないようにする必要があります。 対策としては、 @最大化されたときの自動調整を無くす(そもそも上の仮定が正しいかどうかも分かりませんが) Aイベントが発生したときがユーザーの操作ではありえない(つまり最初の最大化)ときだと知る B問答無用で2回目までのイベント発生時を初期化の時だとする
Bでない方法があればご教授ください。
|