Я использую Microsoft Visual Studio Community 2017 версии 15.7.2 и .NET Framework версии 4.7.03056.
Я использую Winforms TreeView
и изменяю его поведение по умолчанию, чтобы сделать его немногонемного больше похоже на древовидную структуру Windows Explorer.Я установил следующие свойства:
LineHeight` 22
DrawMode OwnerDrawAll
Я использую следующее для события DrawNode
.В этом коде используются растровые изображения в правой и нижней скобках (16x16) для отображения развернутых или нерасширенных узлов, а также используются настраиваемые цвета для выделения / выделения фокуса.Ничего экзотического.
private void treeDir_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
const int indent = 12;
const int markerSpacing = 20;
int leftPos = e.Bounds.Left + e.Node.Level * indent;
Brush selectBrush;
Pen pen;
Graphics g = e.Graphics;
e.DrawDefault = false;
if (e.Node.IsSelected)
{
if (e.Node.TreeView.Focused)
{
selectBrush = new SolidBrush(FocusedBackgroundColor);
pen = new Pen(new SolidBrush(FocusedPenColor));
}
else
{
selectBrush = new SolidBrush(UnfocusedBackgroundColor);
pen = new Pen(new SolidBrush(UnfocusedPenColor));
}
g.FillRectangle(selectBrush, e.Bounds);
g.DrawRectangle(pen, e.Bounds);
}
if (e.Node.Nodes.Count > 0)
{
if (e.Node.IsExpanded)
{
g.DrawImage(Properties.Resources.Expanded, leftPos+2, e.Bounds.Top+2);
}
else
{
g.DrawImage(Properties.Resources.Unexpanded, leftPos+2, e.Bounds.Top+2);
}
}
g.DrawString(
e.Node.Text, CommonFont, new SolidBrush(Color.Black), leftPos + markerSpacing, e.Bounds.Top+2);
}
Что происходит, так это то, что при первом показе формы, если я раскрываю узел, который не является первым узлом, он также перезаписывает (прозрачно перекрывает) текст первого узла.Вот последовательность.
При запуске формы:
Затем я дважды щелкаю Узел 4:
Если дважды щелкнуть первый узел, проблема исчезнет:
С этого момента, если я дважды щелкну Узел 4, проблема больше не возникает.Двойной щелчок по первому узлу устраняет проблему и позволяет избежать ее в течение срока службы формы после этой точки для узла 4. Однако, если я дважды щелкну другой расширяемый узел ниже, это произойдет снова.
Этоошибка в TreeView
или я что-то не так делаю в розыгрыше моего владельца?