MDIフォームに複数のTableLayoutPanels
があります。各テーブルレイアウトには複数のコントロール(ObjectListViewを含む)があり、一番上のものだけがvisibleに設定されています。フォームがフォーカスを取得したときに、背景とアーティファクトがObjectListViewに表示される
このSO answerのように解決策を実装しました。サイズ変更中にレイアウトの子コントロールにちらつきがないため、初めてフォームを開くときに効果的です。
私も追加:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
foreach (CoTableLayoutPanel tlp in this.Controls)
{
if (tlp != null)
{
tlp.BeginUpdate();
tlp.Size = firstLayout.Size;
tlp.EndUpdate();
}
}
}
を、私は、フォーム内のレイアウトを切り替えたとき、彼らはすでに、すべての正しいサイズであり、私はさらにリサイズしながら、ちらつきを避けるように、私は上記ません。これも正常に動作します。
しかし、この派生テーブルレイアウトでコントロールをObjectListView
にしてフォーム間を切り替えると、コントロールが部分的に描画されます(特に境界線)、黒い背景が素早く表示され、最後の列が毎回サイズ変更されます列のFillsFreeSpace
プロパティ)。
標準TableLayoutPanel
を使用すると、リストコントロールは期待通りに動作します。アーティファクトなし、黒い背景なし、列のサイズ変更なし。しかし、私はフォームを開くときに私はちらつきが戻ってきます。
ObjectListView
は、Invalidate
とRefresh
のようなプロパティを持ち、フォームのOnGotFocus
メソッドでこれらを呼び出そうとしました。問題は依然として続きます。
これはObjectListView
の問題ですか、派生テーブルレイアウト内から問題を解決できますか?
EDIT
問題は、この方法によって引き起こされる:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_COMPOSITED;
return cp;
}
}
は、予想通り、この方法はObjectListView
作業を行いますコメントアウトが、ちらつき戻ります。
上記の方法の回避策はありますか?
ありがとうございます。 –