タイトルが長ったらしくなってしまったのですが、ピクチャボックスをFormにDockしたときにピクチャボックスのリサイズイベントでピクチャボックスの大きさ(幅、高さ)を取得するときのお話です。
フォームエディタで、上図の様にPictureBoxをFormにDockして、リサイズイベントでピクチャボックスのサイズを取得するには
private void pictureBox1_Resize(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(
pictureBox1.Width.ToString() + ", " + pictureBox1.Height.ToString()
);
}
とすれば、特に問題なくピクチャボックスの幅と高さを拾う事ができ、出力ウィンドウには
631, 460
632, 461
633, 462
634, 463
635, 464
636, 464
637, 465
638, 465
640, 466
640, 467
のように表示されます。
ここで、リサイズイベント内でピクチャボックスのImageプロパティを変更するプログラム
private void pictureBox1_Resize(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(
pictureBox1.Width.ToString() + ", " + pictureBox1.Height.ToString()
);
pictureBox1.Image = null;
}
を実行すると、
683, 483
302, 260
685, 484
302, 260
686, 484
302, 260
687, 485
302, 260
688, 486
302, 260
のように表示され、 pictureBox1.Image = null; のコードが呼ばれた時点でリサイズイベントが再度発生し、取得したサイズが元のサイズに戻ってしまいます。
これを回避するのに、ここ↓
PictureBox リサイズイベントでのコントロールサイズを取得
を参考に sender からPictureBoxを拾うように
private void pictureBox1_Resize(object sender, EventArgs e)
{
var picBox = sender as PictureBox;
System.Diagnostics.Debug.WriteLine(
picBox.Width.ToString() + ", " + picBox.Height.ToString()
);
picBox.Image = null;
}
としても結果は変わらず。
そこで、今回の条件としては、ピクチャボックスをフォームにDockしているので、ピクチャボックスのリサイズイベントが発生するときは、フォームのリサイズイベントも発生するということで、フォームのリサイズイベントで、ピクチャボックスのサイズを拾うように
private void Form1_Resize(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(
pictureBox1.Width.ToString() + ", " + pictureBox1.Height.ToString()
);
pictureBox1.Image = null;
}
としたら、出力ウィンドウにも
631, 460
632, 461
633, 462
634, 463
635, 464
636, 464
637, 465
638, 465
640, 466
640, 467
のように表示され、正しく動いてくれました。
なぜ、このような動きになるのか?不明ですが、結果オーライということで。。
← C#へ戻る