2010-07-22 7 views
0

Я установил BackColor конкретных TreeNodes в TreeView как подсказку для пользователя о том, что что-то интересное произошло с узлом во время использования приложения. Однако, когда я устанавливаю BackColor, это приводит к перерисовке всего родительского элемента управления TreeView, а не только к области меток конкретного TreeNode, которая была изменена. Я не звоню в Refresh или Update в любой момент - просто установите BackColor на TreeNode. Похоже, что вместо того, чтобы просто аннулировать границы TreeNode, которые были изменены, TreeView обновляет всю свою область. Это приводит к раздражающей быстрой вспышке элемента управления.Изменение TreeNode.BackColor вызывает полное перетаскивание TreeView

Любая идея, почему это происходит, и если ее можно легко остановить?

ответ

1

Не похоже, что вы можете остановить это. Я посмотрел на код сеттер TreeNode.BackColor:

[SRDescription("TreeNodeBackColorDescr"), SRCategory("CatAppearance")] 
public Color BackColor 
{ 
    get 
    { 
     if (this.propBag == null) 
     { 
      return Color.Empty; 
     } 
     return this.propBag.BackColor; 
    } 
    set 
    { 
     Color backColor = this.BackColor; 
     if (value.IsEmpty) 
     { 
      if (this.propBag != null) 
      { 
       this.propBag.BackColor = Color.Empty; 
       this.RemovePropBagIfEmpty(); 
      } 
      if (!backColor.IsEmpty) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
     else 
     { 
      if (this.propBag == null) 
      { 
       this.propBag = new OwnerDrawPropertyBag(); 
      } 
      this.propBag.BackColor = value; 
      if (!value.Equals(backColor)) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
    } 
} 

Всякий раз, когда изменения BackColor, Invalidate вынужден на дереве, которое содержит узел. Опять же, глядя на функцию InvalidateHostTree, нет флажков, которые вы можете установить, чтобы остановить обновление.

+0

Спасибо. Вот чего я боялся. Я думаю, что приемлемым решением может быть OwnerDraw с собственным свойством CustomBackColor. –