3

ツリーノード (長い名前) を編集すると、背景色が変わります:

ここに画像の説明を入力

背景を削除するにはどうすればよいですか? 背景色を変更するにはどうすればよいですか?

OnDrawNode で削除しようとしましたが、それは不可能です。次に、TVM_GETEDITCONTROL メッセージを使用して WM_CTLCOLOREDIT を送信しようとしましたが、これも機能しません。

    [DllImport("user32.dll")]
    internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    internal const int WM_CTLCOLOREDIT = 0x0133;
    internal const int TVM_GETEDITCONTROL = 0x110F;

private void NodeTree_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
        TreeNode nodeEditing = e.Node;
        IntPtr editControlHandle = SendMessage(NodeTree.Handle, (uint)TVM_GETEDITCONTROL, IntPtr.Zero, IntPtr.Zero);
        if (editControlHandle != IntPtr.Zero)
        {
            SendMessage(editControlHandle, (uint)WM_CTLCOLOREDIT, ColorTranslator.ToWin32(Color.Red), new IntPtr(1));
        }
    }
4

1 に答える 1

2

この背景 - 選択したノードの背景。イベント BeforeLabelEdit で、AfterSelect の登録を解除し、選択したノードを記憶してノードの選択を解除します。

private TreeNode SelectedNodeBeforeEdit;

private void NodeTree_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    NodeTree.AfterSelect -= NodeTree_AfterSelect;
    SelectedNodeBeforeEdit = NodeTree.SelectedNode;
    NodeTree.SelectedNode = null;
}

イベント AfterLabelEdit で、AfterSelect にサブスクライブし、選択したノードを表示します。

private void NodeTree_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    NodeTree.SelectedNode = SelectedNodeBeforeEdit;
    NodeTree.AfterSelect += NodeTree_AfterSelect;
}
于 2013-10-29T05:18:05.027 に答える