【问题标题】:Fill the color in List box Circle in C#.Net in Winforms在 Winforms 中的 C#.Net 中的列表框圆圈中填充颜色
【发布时间】:2009-09-08 07:35:42
【问题描述】:

我必须列表框一有列表框有圆圈和它的值 我根据来自数据库的大小动态创建 Circle ..... 我想在列表框中填充颜色,其中圆圈是从另一个列表框中绘制的 物品有红色、蓝色、 在圆形列表框中选择的一项中,然后单击第二个列表框颜色,然后自动填充圆形列表框圆形颜色.. 在颜色列表框中选择的最大颜色为 2 .. 表示如果选择了两种颜色,则一半是第一种颜色,一半是第二种颜色填充。 这是我的要求,有没有朋友能帮我看看如何填充圆圈颜色...

private void Form1_Load(object sender, EventArgs e)
{
    listBox1.DrawMode = DrawMode.OwnerDrawVariable;
    listBox1.Items.Add("One");
    listBox1.Items.Add("Two");
    listBox1.Items.Add("Three");
    listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);    
}

void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    ListBox l=sender as ListBox;
    e.DrawBackground();
    e.DrawFocusRectangle();
    e.Graphics.DrawEllipse(Pens.Blue, new Rectangle(1, 1+e.Index * 15, 100, 10));
    e.Graphics.DrawString(l.Items[e.Index].ToString(),
          new Font(FontFamily.GenericSansSerif,9, FontStyle.Regular),
          Brushes.Red , e.Bounds);
 }

【问题讨论】:

    标签: c# c#-3.0


    【解决方案1】:

    您的部分问题似乎是如何填充椭圆,如下所示:

    using (Brush fill = new Brush( ...))
    {
       e.Graphics.FillEllipse(fill, new Rectangle(1, 1+e.Index * 15, 100, 10));
    }
    

    我不确定你想如何使用第二个列表框,它是颜色名称列表吗?


    附加

    我试了一下:

    在 Form_Load 中,

    listBox2.Items.Add(Color.Blue);
    listBox2.Items.Add(Color.Green);
    listBox2.Items.Add(Color.Red);
    

    在 listBox1_DrawItem 中

    Color back = Color.Black;
    if (listBox2.SelectedIndex >= 0)
       back = (Color)listBox2.SelectedItem;
    
    using (Brush fill = new SolidBrush(back))
    using (Font text = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Regular))
    {
        e.Graphics.FillEllipse(fill, new Rectangle(1, 1+e.Index * 15, 100, 10));    
        e.Graphics.DrawEllipse(Pens.Blue, new Rectangle(1, 1 + e.Index * 15, 100, 10));  
        e.Graphics.DrawString(l.Items[e.Index].ToString(), text, Brushes.Red, e.Bounds);
    }
    

    还要注意使用模式,你真的应该养成这种习惯。

    最后,在 listBox2_SelectedIndexChanged 中

    listBox1.Invalidate();
    

    【讨论】:

      【解决方案2】:

      我不确定我理解你的意思,但如果你想画一个圆来填充颜色,那么:

      e.Graphics.FillEllipse(Brushes.Blue, new Rectangle(1, 1 + e.Index * 15, 10, 10));
      

      而不是DrawEllipse

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-02
        • 1970-01-01
        • 2011-07-28
        • 2011-09-25
        • 2016-11-14
        • 1970-01-01
        相关资源
        最近更新 更多