2012-02-27 26 views
1

はじめ奇妙な自動スクロール動作

私は、単純なユーザーコントロールを書かれています。

コントロールにはFlowLayoutPanelとボタンが含まれています。

private void uxAdd_Click(object sender, EventArgs e) 
{ 
    count++; 
    Label label = new Label(); 
    label.Text = "Label " + count.ToString(); 
    uxFlowLayout.Controls.Add(label); 
} 

AddボタンがFlowLayoutPanel上にラベルを追加し、FlowLayoutPanel.AutoSizeとコントロールのAutoSizeプロパティがtrueとFlowLayoutPanel.FlowDirectionに等しいのでTopDown制御するに等しく、次のように

ボタンのクリックイベントハンドラです高さを増やす。

フォームにユーザーコントロールを配置し、フォームのAutoScrollプロパティをtrueに設定しました。

private void MainForm_Layout(object sender, LayoutEventArgs e) 
{ 
    uxSection.Width = this.ClientSize.Width; 
} 

uxSectionは私がはじめセクションの冒頭で話しているユーザーコントロールである)

はまた、私は、次のレイアウトイベントハンドラを書きました問題

ここに私がやっているのは:

ステップ0。プログラムを実行します。

ステップ1。垂直スクロールバーが表示されるように、ラベルをいくつか追加します。

ステップ2。フォームの下部までスクロールします。

ステップ3。フォームを水平方向にサイズ変更します。

enter image description here

あなたが見ることができるように、フォームのサイズを変更した後、スクロールバーの位置は、(私はそれが一番下にあることを期待)一番下にはありません。

質問には何がないのですか?スクロールバーが一番上に戻るのはなぜですか?

+2

スクロールバーがフォーム上にあり、UserControl上にないように見えるのはなぜですか? FlowLayoutPanel内のボタンもですか?ラベルはフォーカスを得ることができませんが、ボタンができるので、スクロールして表示されます。 WinFormsは、ユーザーが画面上のアクティブなコントロールを表示するのを手助けしようとしています。 – LarsTech

+0

@LarsTech:スポットがあります! – RvdK

+0

@LarsTech:チップをありがとう。いくつかのGoogleの検索後、私はここで回避策を見つけました:http://nickstips.wordpress.com/2010/03/03/c-panel-resets-scroll-position-after-focus-is-lost-and-regained/ –

答えて

0

これは、リサイズ時にコントロール全体が再描画されるためです。

resizeイベントが発生したときにスクロールバーの位置をリセットすることができるように、またはスクロールバーをスクロールバーの下部にプッシュすることができるように、スクロールバーの位置を変数に保存するかリサイズイベントが発生したときにリスト内の項目数を使用してボトム要素の位置を計算し、スクロールバーをその位置に押してリストします。