0

Outlook スタイルのアプリがあります。基本的に、左側にサイドバーがあり、右側にコンテンツをホストするパネル コントロール (pnlMainBody) があります。

コンテンツは通常、ユーザーがサイド バーの適切なボタンをクリックしたときにパネルに追加するユーザー コントロールです。ユーザー コントロールをパネルに追加する方法は次のとおりです。

// _pnlEmails is the User Control that I am adding to the panel
_pnlEmails = new pnlEmails();
_pnlEmails.Dock = DockStyle.Fill;
this.pnlMainBody.Controls.Add(_pnlEmails);

メイン パネルに追加するユーザー コントロールの一部は、UI に関して非常に複雑です。したがってthis.pnlMainBody.Controls.Add(_pnlEmails);、起動すると、コントロールが画面に表示され、パネルコントロールの本体を埋めるようにサイズが変更されます。

実際にはかなり醜いので、実際にサイズ変更が完了するまでサイズ変更を表示しない方法があるかどうか疑問に思っていましたか?

.Visibleユーザーコントロールをfalseに設定しようとしました。私はやってみましたが.SuspendLayout、すべて役に立ちませんでした。

画面遷移をスムーズにする方法はありますか?

4

2 に答える 2

1

まず、次のように設定して、親フォームでダブル バッファ ペインティングをオンにしてみます。

this.DoubleBuffered = true;

負荷ハンドラーまたはそのような場所でそれを実行して、ちらつきがなくなるかどうかを確認します。

それがうまくいかない場合は、子コントロールが .NET Control から派生したエンティティである場合は、DoubleBuffered プロパティを true に設定することもできます。以下は、ダブル バッファ プロパティを公開せずに適切にペイントするコントロールを取得するために最近使用したコードです: (vb バージョン。C# が必要ですか?)

Private Sub ForceDoubleBuffering(ByVal o As Object)
    Dim ctrl As Control
    Dim method As Reflection.MethodInfo
    Dim flags As Reflection.BindingFlags
    ctrl = TryCast(o, Control)
    flags = Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic
    method = ctrl.GetType().GetMethod("SetStyle", flags)
    method.Invoke(ctrl, New Object() {ControlStyles.OptimizedDoubleBuffer, True})
End Sub
于 2010-03-29T21:58:03.230 に答える
1

問題を解決するためのトリックを見つけました。コントロールをメイン パネルに追加した後、Dock.Fill プロパティを設定する限り、ちらつきはありません。

this.pnlMainBody.Controls.Add(_pnlEmails);
_pnlEmails.Dock = DockStyle.Fill;
于 2010-03-30T00:59:05.437 に答える