2015-06-24 1 views
0

Как изменить цвет элемента при фокусировке на нем в winformslistbox?Winforms - Listbox - MouseHover - Цвет деталя

Я пробовал с MouseHover событие listbox. Но ничего не происходит.

private void lstNumbers_MouseHover(object sender, EventArgs e) 
{ 
    Point point = lstNumbers.PointToClient(Cursor.Position); 

    int index = lstNumbers.IndexFromPoint(point); 
    if (index < 0) return; 

    lstNumbers.GetItemRectangle(index).Inflate(1, 2); 
} 
+1

Где в вашем коде вы думаете, что-то происходит WRT для окрашивания ?? Также: Hover и Focus по умолчанию не то же самое. Наконец: Hover не работает так, как вы можете ожидать: он не будет срабатывать снова, когда вы перемещаете мышь внутри элемента управления. Возможно, MouseMove поможет вам лучше. Но я не знаю, в чем ..? – TaW

+0

@TaW, есть ли решение? Пробовал также с «MouseMove», и ничего не происходит. – codeseeker

+2

См. Http://stackoverflow.com/q/1316027/292411 для решения, которое использует свойство DrawMode для переопределения рисования элементов. –

ответ

0

Я думаю, что проблема может быть, что вы не на самом деле изменить цвет элемента вашего парит над:

lstNumbers.GetItemRectangle(index).Inflate(1, 2); //This is trying to inflate the item 

Вам нужно сделать что-то, чтобы изменить цвет.

Также есть событие ItemMouseHover, которое вы можете использовать. Что-то вроде:

private void lstNumbers_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e) 
{ 
     e.Item.BackColor = Color.Green; 
} 

Надеюсь, это вам поможет!

+0

** ВОПРОС О ПРОФИЛАКТИКЕ ** 'WINFORMS' – codeseeker

0

Я получил решение от этого answer.

Мы должны следить за вещи,

public partial class Form1 : Form 
{ 
    private int _MouseIndex = -1; 

    public Form1() 
    { InitializeComponent(); } 

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
    Brush textBrush = SystemBrushes.WindowText; 

    if (e.Index > -1) 
    { 
     if (e.Index == _MouseIndex) 
     { 
     e.Graphics.FillRectangle(SystemBrushes.HotTrack, e.Bounds); 
     textBrush = SystemBrushes.HighlightText; 
     } 
     else 
     { 
     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
     { 
      e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); 
      textBrush = SystemBrushes.HighlightText; 
     } 
     else 
      e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); 
     } 
     e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, textBrush, e.Bounds.Left + 2, e.Bounds.Top); 
    } 
    } 

    private void listBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
    int index = listBox1.IndexFromPoint(e.Location); 
    if (index != _MouseIndex) 
    { 
     _MouseIndex = index; 
     listBox1.Invalidate(); 
    } 
    } 

    private void listBox1_MouseLeave(object sender, EventArgs e) 
    { 
    if (_MouseIndex > -1) 
    { 
     _MouseIndex = -1; 
     listBox1.Invalidate(); 
    } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^