在网上看到这段方法能实现相邻行字体颜色不同,但是我要实现背景色不同,请问有何方法。求指导。     private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {       
           listBox1.DrawMode = DrawMode.OwnerDrawFixed;  //允许手动设置控件元素 
            // 定义默认笔刷的颜色   
            Brush myBrush = Brushes.Black;          
            //设置奇偶不同的笔刷
            if (e.Index % 2 == 0)
            {
                myBrush = Brushes.Red;
            }
            else
            {
                myBrush = Brushes.Blue;
            }
            // 根据设置的笔刷重新绘制项 
          e.DrawBackground();
            e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
            e.Bounds, StringFormat.GenericDefault);
          //  e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
          // e.Bounds, StringFormat.GenericDefault);
            // 绘制聚焦框 
            e.DrawFocusRectangle(); 
        }

解决方案 »

  1.   

            private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {            // 定义默认笔刷的颜色   
                Brush myBrush = Brushes.Black;
                Brush myBrush1 = Brushes.Black;
                //设置奇偶不同的笔刷
                if (e.Index % 2 == 0)
                {
                    myBrush = Brushes.Red;
                    myBrush1 = Brushes.White;
                }
                else
                {
                    myBrush = Brushes.Blue;
                    myBrush1 = Brushes.Gray;
                }
                // 根据设置的笔刷重新绘制项 
                e.Graphics.FillRectangle(myBrush1, e.Bounds);
                e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
                e.Bounds, StringFormat.GenericDefault);
                //  e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
                // e.Bounds, StringFormat.GenericDefault);
                // 绘制聚焦框 
                e.DrawFocusRectangle(); 
            }
      

  2.   

    这个简单,判断下if (listBox1.SelectedItem == listBox1.Items[e.Index])
        e.DrawBackground(); //如果是选中的,就按照默认的画
    else
        e.Graphics.FillRectangle(myBrush1, e.Bounds);
      

  3.   

    Quote: 引用 4 楼 caozhy 的回复:

    现在调试了下,但是只有第一次时能选中变为蓝色,接下去的都不行。而且如果选中变灰的那些项后再去选其它项,就会发现原来是灰色背景已经变白了。
      

  4.   

    在ListBox的SelectChanged中调用listBox1.Refreash();
      

  5.   

      private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                
     
                // 定义默认笔刷的颜色   
                Brush myBrush = Brushes.Black;
                Brush myBrush1 = Brushes.Black;
                //设置奇偶不同的笔刷
                if (e.Index % 2 == 0)
                {
                    myBrush = Brushes.Red;
                    myBrush1 = Brushes.White;
                }
                else
                {
                    myBrush = Brushes.Blue;
                    myBrush1 = Brushes.Gray;
                }
                // 根据设置的笔刷重新绘制项 
                e.Graphics.FillRectangle(myBrush1, e.Bounds);
                e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
                e.Bounds, StringFormat.GenericDefault);
                //  e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,
                // e.Bounds, StringFormat.GenericDefault);
                // 绘制聚焦框 
                e.DrawFocusRectangle(); 
            
            }
    我原封不动加在DrawItem事件里一点效果也没有啊  求助