0

些細なことですが気になったので…

Visual Studio 2008、C#。

データバインドされたコントロールを含むマスター/ディテール フォームがあります。ユーザーがリストボックスでレコードを選択すると、フォーム上の複数のデータバインドされたコントロールですべての詳細が更新されます。

たまたま、新しいデータが再入力されると、それらは一種の「フラッシュ」または点滅します。これは、ほんの一瞬でフォームを横切る電波のようなものです:)それをよりよく説明する方法がわかりません

大したことではありませんが、それでも「不安定」で醜いので、エレガンスのために、それを防ぐ簡単な方法があるかどうか疑問に思っていましたか?

SuspendLayoutResumeLayout (コンテナー コントロール上)を呼び出すことを考えましたが、どのイベントを処理すればよいでしょうか? それを一時停止するためのlistBox_SelectedValueChangedだと思います...しかし、再開するには?

4

2 に答える 2

2

コントロールのデータが更新されたときに描画を中断することで、ちらつきを防ぐことができます。

このstackoverflowの質問から:

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);

private const int WM_SETREDRAW = 11; 

public static void SuspendDrawing(Control parent)
{
    SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
}

public static void ResumeDrawing(Control parent)
{
    SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
    parent.Refresh();
}

どのイベントを処理するかについては、よくわかりません。

于 2010-02-18T01:18:46.923 に答える
0

「SuspendLayout」が何かをしてくれたことに気づきませんでしたが、試してみる価値はあります。選択したアイテムが卸売りに変更されたときに、「CurrentChanged」イベントをラッチしたいと思うでしょう。

DoubleBuffered (小道具ウィンドウの「動作」の下) を true に設定しましたか?

control.DoubleBuffered = true;
于 2010-02-18T00:45:04.973 に答える