2

ちらつきがTreeViewあり、それが一般的な問題であることはわかっています。TreeView問題は、イベントがないことです。

はい、ノードを a から再帰的に追加するXmlDocumentと、少しちらつきますが、それは正常なことです。すべてがロードされた後でも、鉱山がちらつきます。マウスがノード上にあるか、ノードをクリックするとすぐに。私がチェックしました :

  • これを引き起こす可能性のあるすべてのプロパティ (DrawModeなどShowToolTip)
  • すべてのイベントが存在しないことを確認します。(ドラッグアンドドロップイベントがありますが、それが問題ではなく、何も変わらないことを確認するためにコメントしました)。
  • 更新中にBeginUpdateとを使用しました。(現在はデータが取り込まれており、関連するプロセスはありませんが、まだちらつきます。EndUpdateTreeViewTreeView

明らかな何かが欠けていますか?

4

2 に答える 2

4

私はそれを考え出した。ちらつきの問題が発生するのは、 a TreeView(おそらく別のコントロールが同じ問題を抱えている可能性があります) の場合です。SplitContainer非常に単純なプロトタイプで試してみました。これは、コンテナーの 1 つと 1 つだけの新しいもので、一部のノードでちらつきが既に見られますWinform。私は多くのことを試しましたが、仕事をしたように見えるのは次のとおりです。SplitContainerTreeView

this.SetStyle(ControlStyles.DoubleBuffer, true);

すべてのちらつきを完全に排除したもう1つのことはこれです:

int style = NativeWinAPI.GetWindowLong(this.Handle, NativeWindowAPI.GWL_EXSTYLE);
style |= NativeWinAPI.WS_EX_COMPOSITED;
NativeWinAPI.SetWindowLong(this.Handle, NativeWinAPI.GWL_EXSTYLE, style);

両方ともForm_Load.

NativeWinAPI クラス:

using System.Runtime.InteropServices;

internal static class NativeWinAPI
{
   internal static readonly int GWL_EXSTYLE = -20;
   internal static readonly int WS_EX_COMPOSITE = 0x02000000;

   [DllImport("user32")]
   internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [DllImport("user32")]
   internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, dwNewLong);
}

これにより、 内のコントロールのちらつきが完全に停止しSplitContainerます。これで誰かを助けることができることを願っています。

于 2012-12-18T20:33:16.173 に答える