Элемент управления TreeView в C #, выберите () и фокус - PullRequest
8 голосов
/ 13 марта 2009

Когда я выбираю узел в древовидном списке, он подсвечивается, и я показываю данные на основе этого узла ниже. Когда я выбираю другой элемент управления (древовидная структура теряет фокус), он больше не выделяется. Как сохранить выделение после потери фокуса? Во время поиска я не могу сказать, какой узел выбран, так как я должен держать фокус на текстовом поле (чтобы пользователь мог набирать больше текста).

Ответы [ 3 ]

10 голосов
/ 13 марта 2009

Необходимо установить для свойства HideSelection значение false, чтобы вы увидели выделение, хотя элемент управления TreeView потерял фокус

3 голосов
/ 04 апреля 2012

Я только что столкнулся с этой проблемой, и вот как я ее решил: изменено свойство DrawMode на TreeViewDrawMode.OwnerDrawText и зарегистрировано событие DrawNode

 
    private void MyTreeGridview_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    {
        if ((e.State == TreeNodeStates.Selected) && (!MyTreeGridview.Focused))
        {
            Font font = e.Node.NodeFont ?? e.Node.TreeView.Font;
            Color fore = e.Node.ForeColor;
            if (fore == Color.Empty)fore = e.Node.TreeView.ForeColor;      
            fore = SystemColors.HighlightText;
            Color highlightColor = SystemColors.Highlight;
            e.Graphics.FillRectangle(new SolidBrush(highlightColor), e.Bounds);
            ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, fore, highlightColor);
            TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, highlightColor, TextFormatFlags.GlyphOverhangPadding);
        }
        else
        {
            e.DrawDefault = true;
        }
    }
0 голосов
/ 24 июня 2014

Если цвет подсветки недостаточно яркий, если для HideSelection установлено значение False и TreeView потерял фокус:

Убедитесь, что HideSelection вашего TreeView имеет значение True (значение по умолчанию).

Затем обработайте события входа и выхода TreeView, такие как:

void myTreeView_Leave(object sender, EventArgs e)
{
    if((sender as TreeView).SelectedNode != null)
        (sender as System.Windows.Forms.TreeView).SelectedNode.BackColor = Color.Red; //your highlight color
}

void myTreeView_Enter(object sender, EventArgs e)
{
    if((sender as TreeView).SelectedNode != null)
        (sender as TreeView).SelectedNode.BackColor = (sender as TreeView).BackColor;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...