none
求助 winform窗体控件 listbox RRS feed

  • 问题

  • 我现在要重画listbox的样式
    让listbox没项字体的颜色按我想要的颜色显示
    使用到的是listBox1.DrawMode = DrawMode.OwnerDrawFixed; 重画listbox

    这是帮助文档上给的例子
    private void listBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
    {
       // Set the DrawMode property to draw fixed sized items.
       listBox1.DrawMode = DrawMode.OwnerDrawFixed;
       // Draw the background of the ListBox control for each item.
       e.DrawBackground();
       // Define the default color of the brush as black.
       Brush myBrush = Brushes.Black;

       // Determine the color of the brush to draw each item based on the index of the item to draw.
       switch (e.Index)
       {
          case 0:
             myBrush = Brushes.Red;
             break;
          case 1:
             myBrush = Brushes.Orange;
             break;
          case 2:
             myBrush = Brushes.Purple;
             break;
       }

       // Draw the current item text based on the current Font and the custom brush settings.
       e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault);
       // If the ListBox has focus, draw a focus rectangle around the selected item.
       e.DrawFocusRectangle();
    }

    我照着例子写的代码
     private void button2_Click(object sender, EventArgs e)
            {
                listBox1.Items.Add("shanghai");
                listBox1.Items.Add("beijing");


                Graphics g = this.CreateGraphics();
                DrawItemEventArgs dia = new DrawItemEventArgs(g, new Font("宋体", 13), new Rectangle(), 0, DrawItemState.None);
                listBox1_DrawItem(listBox1, dia);
            }

            private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                listBox1.DrawMode = DrawMode.OwnerDrawFixed;
                e.DrawBackground();
                //SolidBrush sb = new SolidBrush(Color.Red);
                Brush b = Brushes.Red;
                //e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, sb, e.Bounds, StringFormat.GenericDefault);
                e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, b, e.Bounds, StringFormat.GenericDefault);
                e.DrawFocusRectangle();

            }

    我通过按钮2调用 listBox1_DrawItem这个方法。来重画,listbox里面项的字体颜色是改变了。
    但是listBox1_DrawItem(listBox1, dia);这个方法又给我在界面0,0的位置画了一次,是指定的0的索引项的字符串。
    但是我不在按钮2中调用listBox1_DrawItem(listBox1, dia);这个方法,改变listbox里面项的字体颜色就没有反映。好像重画就没有执行。
    这么让listb自动重绘画?重画是里面项的内容,不是在界面0,0的位置给我又画一个。
    还是非要调用listBox1_DrawItem(listBox1, dia);方法?
    DrawItemEventArgs e 这个参数该这么配置啊?感觉我配置错了。

    2009年7月21日 6:34

答案

  • 以解决了~
      listBox1.DrawMode = DrawMode.OwnerDrawFixed;
    这个在控件的属性上有这个属性,在属性上设置这个为OwnerDrawFixed就可了

    • 已标记为答案 如蜗牛 2009年7月21日 6:59
    2009年7月21日 6:59