1

いくつかの行のコントロールを含むTableLayoutPanelを使用するC#.NET3.0プロジェクトがあります。一番上の項目が表示されなくなるように下にスクロールしてから、1つの列のコントロールを削除して新しいコントロールに置き換えると、TableLayoutPanelは一番上にスクロールして戻ります。

/// the panel in question
private System.Windows.Forms.TableLayoutPanel impl_;

/// The user has clicked a linklabel in the panel. replace it with an edit-box
private void OnClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    LinkLabel link_label = sender as LinkLabel;
    TextBox new_edit = new TextBox();
    // setup the new textbox...

    TableLayoutPanelCellPosition pos = impl_.GetCellPosition(link_label);
    impl_.Controls.Remove(link_label);
    impl_.Controls.Add(new_edit, pos.Column, pos.Row);
    new_edit.Focus();
}

スクロール位置が変わらないようにするにはどうすればよいですか?

4

2 に答える 2

2

フォーカスのあるコントロールを削除しています。フォーカスを与える別のものを見つけようとし、必要に応じてスクロールして表示します。別のコントロールにフォーカスを与えるのではなく、うまくいく可能性のあることの1つは、ラベルを削除する前にTextBoxを追加してフォーカスを与えることです。

于 2010-08-24T22:50:47.637 に答える
0

Hans Passantのソリューションは、状況に最適です。ただし、フォーカスを操作できないその他の場合は、を使用AutoScollPositionして前の位置にスクロールして戻る ことができます。

Point scrollPosition = tlp.AutoScrollPosition;

//make changes here

tlp.AutoScrollPosition = new Point(-scrollPosition.X, -scrollPosition.Y) //according to the documentation negative coordinates are returned but positive ones need to be assigned
于 2016-04-06T07:54:33.543 に答える