2016-08-14 5 views
1

Я использую эту реализацию TreeViewMS, так что пользователи могут иметь функцию мультиселектора, но я обнаружил, что сегодня что-то не работает должным образом. Если я установил свойство TreeNode.ForeColor, чтобы сказать, Color.Red, и положите фокус на этот узел, его цвет снова вернется к цвету по умолчанию (черный), когда я вытащу мышь из этого узла. Как мне это решить? Я искал событие, чтобы установить TreeNode.ForeColor в свой пользовательский интерфейс, когда узел потерял фокус, если этот узел соответствует необходимости изменения его цвета. Есть ли такое событие?Пользовательский Node.ForeColor сбрасывается при утрате фокуса

+0

ли HideSelection правда? – TaW

ответ

1

Вопрос находится в TreeViewMS класс. Посмотрите на removePaintFromNodes метод:

protected void removePaintFromNodes() 
{ 
    if (m_coll.Count==0) return; 

    TreeNode n0 = (TreeNode) m_coll[0]; 
    Color back = n0.TreeView.BackColor; 
    Color fore = n0.TreeView.ForeColor; 

    foreach (TreeNode n in m_coll) 
    { 
     n.BackColor = back; 
     n.ForeColor = fore; 
    } 
} 

Этот метод сбрасывает BackColor и ForeColor в TreeView по умолчанию.

Если вы удалите этот метод, он сохранит приоритет узла, когда вы нажмете на другой узел, но когда выбран узел, он будет использовать по умолчанию forecolor для выбранного узла.

Чтобы исправить это, вы можете нарисовать текст узла самостоятельно, делая это:

treeViewMS1.DrawMode = TreeViewDrawMode.OwnerDrawText; 
treeViewMS1.DrawNode += TreeViewMS1_DrawNode; 

И это:

private void TreeViewMS1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
    TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds, e.Node.ForeColor, TextFormatFlags.GlyphOverhangPadding); 
}