Не удалось сделать переключение цвета список
Привет
Я пытаюсь сделать listbox, элементы должны быть окрашены, и всякий раз, когда один из его элементов выбирается, этот элемент меняет свой цвет
И если я выберу его снова, его цвет вернется обратно (переключатель), но удивительно, что это произошло, когда я нажал вертикальную прокрутку (против моего желания)
Я хочу, чтобы он стал переключателем, когда я выбираю этот элемент с помощью мыши.
Я думаю, что индекс разыскиваемого элемента не будет доступен в событии щелчка мыши(mouseclick(object sender, MouseEventArgs e)) .
Я приму ответ даже если вы добавите еще одну кнопку или любым другим способом
спасибо
Что я уже пробовал:
int[] MARK = new int[10]; ListBox lb = new ListBox(); private void FormLoad(object sender, EventArgs e) { for (i = 0; i < 10; i++) str3[i] = "Hello_"+i.ToString(); lb.Items.AddRange(str3);//new object[] { str3 }); lb.Location = new System.Drawing.Point(80, 40); lb.Size = new System.Drawing.Size(160, 80); lb.DrawMode = DrawMode.OwnerDrawFixed; lb.DrawItem += new DrawItemEventHandler(MyListBox_DrawItem); Controls.Add(lb); } private void MyListBox_DrawItem(object sender, DrawItemEventArgs e) { ListBox lbSender = (ListBox)sender; if (lbSender == lb && (e.State & DrawItemState.Selected) != DrawItemState.Selected) { e.DrawBackground(); string s = lb.Items[e.Index].ToString(); Brush brush = Brushes.Green; if (MARK[e.Index] == 0) {brush = Brushes.Blue;} else if (MARK[e.Index] == -1) {brush = Brushes.Red;} e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds.Location, StringFormat.GenericDefault); } else if (lbSender == lb && (e.State & DrawItemState.Selected) == DrawItemState.Selected) { e.DrawBackground(); string s; Brush brush = Brushes.Green; if (MARK[e.Index] == 0) {brush = Brushes.Red;MARK[e.Index] = -1;} else if (MARK[e.Index] == -1){brush = Brushes.Blue;MARK[e.Index] = 0;} s = lb.Items[e.Index].ToString(); e = new DrawItemEventArgs(e.Graphics, e.Font, e.Bounds, e.Index, e.State ^ DrawItemState.Selected, e.ForeColor, Color.Black); e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds.Location, StringFormat.GenericDefault); e.DrawFocusRectangle(); } }
Gerry Schmitz
Используйте WPF, если вы хотите "фантазии" и меньше / нет боли.