Mr.Tです、こんにちは。
#.NETFramework2.0以降の場合です。
Windows.FormでPanelコントロールを利用する機会は非常に多いと思うのですが、その際、動的にコントロールを
追加するには、
targetPanel.controls.add(addingControl)
と書けばよいわけです。
その際に
- targetPanel.AutoScroll=Trueであり
- addingControl.Locationの値を設定したとする
すると、Panelを親として相対位置で、コントロールが配置されます。
この相対位置というのは注意が必要で、
- ボタンクリックなどで動的にコントロールが追加され、スクロールバーが表示されて
- 追加後にスクロールバーで位置を動かす
これにより、それまで表示されていた内部コントロールは、スクロールされた分だけLocationの位置が変化してしまいます。
これを絶対位置とするためには、そのスクロール分を考慮して、LocationにPointを与えてやらなくてはなりません。
つまり、
Dim nextPoint as Piont = new Point(x,y)
addinControl.Location = nextPoint
ではなく、
Dim nextPoint as Piont = new Point(x,y)
nextPoint.offset(x-targetPanel.HorizontalScroll.Value,y-targetPanel.VerticalScroll.Value)
nextPoint.offset(-targetPanel.HorizontalScroll.Value,-targetPanel.VerticalScroll.Value)
addinControl.Location = nextPoint
としなくてはなりません。
#まったくのメモ
#2008-05-28 ソースに間違いがあったのを修正