Я пытаюсь добавить еще несколько значков в элементы стандартного элемента управления System.Windows.Forms.TreeView.TreeView владелец рисовать сбой при выборе
Мой план состоял в том, чтобы изменить область ярлыков элемента управления древовидной структурой, но это показывает странное поведение. Если я щелкнул узел, чтобы выбрать его, при нажатии кнопки мыши фон будет правильно нарисован цветом подсветки. Тем не менее, текст является неправильным невыбранным цветом, пока я не отпущу кнопку мыши. Как будто e.State
содержит неправильное состояние между нажатием и отпусканием кнопки мыши.
Вот что я делаю: я начинаю с this.DrawMode = TreeViewDrawMode.OwnerDrawText
, а затем регистрирую обработчик событий с this.DrawNode += LayoutTreeView_DrawNode
. Вот обработчик:
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
Color color = (e.State & TreeNodeStates.Selected) != 0 ?
SystemColors.HighlightText : SystemColors.WindowText;
TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine |
TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis;
TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags);
}
Если установить обработчик в чехле по умолчанию ...
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DefaultDraw = true;
}
... То же самое происходит, что является странным, так как окна на самом деле рисунок сейчас. Такое поведение наблюдается в Windows XP с .Net 3.5.
Есть ли способ обойти это странное поведение?
FYI, всегда полезно включать версию .Net, с которой вы имеете дело. Я дам вашему образцу попытку выяснить, полностью ли я понимаю, что вы видите. Если я думаю, что я это сделаю, я скажу вам, что я думаю, что происходит. –
Кроме того, я никогда не являюсь поклонником рисования потребителем элемента управления. Я всегда стараюсь сделать это в производном классе, таким образом, если такое же поведение необходимо для другой формы или приложения, это проще сделать. –
Я не могу воспроизвести описанное поведение с дефолтом по умолчанию, но может с помощью настраиваемого кода. Я запускаю Vista x64; VS 2008. .Net 3.5. Не могли бы вы добавить версию ОС, Visual Studio и .Net, которые вы используете на вопрос. (Я слышал слухи о том, что Vista и Windows 7 имеют некоторые отличия против XP за то, как TreeViews работают в ОС.) –