フォームの DoubleBuffered プロパティを True に設定してみてください。
更新:実際には、コントロールがフォームのパネルにあるため、おそらく何もしません。組み込みの Panel コントロールには公開された DoubleBuffered プロパティがないため、これを行うには、DBPanel という名前の UserControl をプロジェクトに追加し、UserControl ではなく Panel から継承するようにコードを変更します (これは変更できます)。追加した後、CS ファイルに手動で挿入します)。UserControl を追加すると、コードは次のようになります。
public partial class DBPanel : UserControl
{
public DBPanel()
{
InitializeComponent();
}
}
次のように編集します (UserControl を Panel に変更し、「this.DoubleBuffered = true;」行をコンストラクターに追加します)。
public partial class DBPanel : Panel
{
public DBPanel()
{
InitializeComponent();
this.DoubleBuffered = true;
}
}
プロジェクトをビルドすると、コンパイラは "this.AutoScaleMode ..." で始まる行で barf を実行します。この行を削除して再構築します。
通常の Panel の代わりに DBPanel コントロールをフォームで使用できるようになりました。これにより、ちらつきの問題が解決されます。
更新 2 : 申し訳ありませんが、あなたの質問を十分に読んでいませんでした。そうです、スクロールバーのつまみを放すまで、Panel はそれ自体を再描画しません。この効果を実現するには、独自の UserControl を作成するだけでよいと思います。
基本的には、VScrollBar が右側にドッキングされた UserControl と、左側にドッキングされた AutoScroll = false の Panel が残りのスペースを占めるだけです。VScrollBar の Scroll イベントと ValueChanged イベントは、親指を上下に動かすと発生するため、LinkLabels の束を内側の Panel に追加した後、これらのイベントを使用して Panel の Top 位置を変更し、動的スクロール効果を実現できます。あなたが探しています。
パネルがデフォルトでこのように機能しないこと、またはそれを有効にする設定さえないことは、ちょっとイライラします。