Engineer khalid Ответов: 1

Как изменить цвет выбранного элемента двойным щелчком мыши или любым другим способом


Hello
I want to change the color of a selected item in ListBox1 by DoubleClick on that item, I drew the items in different colors in formload but I could not change the color of any items after formload ,i tried double click 


Что я уже пробовал:

private void FormLoad(object sender, EventArgs e)
{
    Global_A = 1;
    ListBox1.Items.AddRange(new Object[]
        { "Red Item", "Orange Item", "Purple Item" });
    ListBox1.Location = new System.Drawing.Point(81, 69);
    ListBox1.Size = new System.Drawing.Size(120,95);
    ListBox1.DrawMode = DrawMode.OwnerDrawFixed;
    ListBox1.DrawItem += new DrawItemEventHandler(ListBox1_DrawItem);
    //ListBox1.SelectedIndexChanged += new System.EventHandler(ListBox1_SelectedIndexChanged);
    Controls.Add(ListBox1);
    Global_A = 2;
    Global_id = 2;
}//FormLoad

private void ListBox1_DrawItem(object sender,
    System.Windows.Forms.DrawItemEventArgs e)
{
    if(e.Index < 0) return;
    if (Global_A == 1)
   {e.DrawBackground();
        Brush myBrush = Brushes.Black;
        switch (e.Index)
        {
            case 0: myBrush = Brushes.Red; break;
            case 1: myBrush = Brushes.Orange; break;
            case 2: myBrush = Brushes.Purple; break;
         }
        e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(),
            e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
        e.DrawFocusRectangle();
   }
    else if (Global_A == 2)
   {
    e.DrawBackground();
    Graphics g = e.Graphics;
    //Brush myBrush = Brushes.Black;
    Brush myBrush2 = Brushes.Red;
    //g.FillRectangle(new SolidBrush(Color.Silver), e.Bounds);
    //e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
      e.Graphics.DrawString(ListBox1.Items[id].ToString(),e.Font, myBrush2, e.Bounds, StringFormat.GenericDefault);
    e.DrawFocusRectangle();
  }//A=2
}

Gerry Schmitz

Вы будете писать меньше кода, который более интуитивно понятен в WPF / UWP / XAML.

Engineer khalid

у меня нет никаких знаний в wpf/ UWP / XAML.
я только что улучшил этот вопрос...

1 Ответов

Рейтинг:
9

OriginalGriff

Вам нужно установить значение drawmode для того, чтобы огонь события DrawItem :

private void FrmMain_Shown(object sender, EventArgs e)
    {
    myListBox.Items.Add("A - Cyan");
    myListBox.Items.Add("B - Magenta");
    myListBox.Items.Add("C - Yellow");
    myListBox.Items.Add("D - Black");
    myListBox.DrawMode = DrawMode.OwnerDrawFixed;
    }

private void MyListBox_DrawItem(object sender, DrawItemEventArgs e)
    {
    if (sender is ListBox lb)
        {
        e.DrawBackground();
        string s = lb.Items[e.Index].ToString();
        Brush brush = Brushes.Green;
        switch (s[0])
            {
            case 'A': brush = Brushes.Cyan; break;
            case 'B': brush = Brushes.Magenta; break;
            case 'C': brush = Brushes.Yellow; break;
            case 'D': brush = Brushes.Black; break;
            }
        e.Graphics.DrawString(s, e.Font, brush, e.Bounds, StringFormat.GenericDefault);
        }
    }
Будет окрашивать каждый предмет по-разному.


Engineer khalid

вышеприведенное решение было хорошим оно помогло мне найти проблему следующая деталь тоже поможет


ListBox lbSender = (ListBox)отправитель;

если (lbSender == фунт &&усилителя; (Эл.Состояние усилителя; amp; DrawItemState.Выделено) != DrawItemState.Выбранный )
{ //нарисуйте элемент}

остальное, если (lbSender == фунт &&усилителя; (Эл.Состояние усилителя; amp; DrawItemState.Выделено) == DrawItemState.Выбранный)
{// изменение цвета выбранного элемента}

Engineer khalid

примечание Я подтвердил свою электронную почту и принял решение с помощью grad 5 Спасибо

OriginalGriff

Всегда пожалуйста!