Я использую эту реализацию TreeViewMS
, так что пользователи могут иметь функцию мультиселектора, но я обнаружил, что сегодня что-то не работает должным образом. Если я установил свойство TreeNode.ForeColor
, чтобы сказать, Color.Red
, и положите фокус на этот узел, его цвет снова вернется к цвету по умолчанию (черный), когда я вытащу мышь из этого узла. Как мне это решить? Я искал событие, чтобы установить TreeNode.ForeColor
в свой пользовательский интерфейс, когда узел потерял фокус, если этот узел соответствует необходимости изменения его цвета. Есть ли такое событие?Пользовательский Node.ForeColor сбрасывается при утрате фокуса
1
A
ответ
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);
}
ли HideSelection правда? – TaW