非常简单问题,不幸的是从来没有在C#中使用绘图控件等所以我不确定如何看待这个。 好吧,我从一堆文本框中绘制一个饼图,用于输入并在按钮事件上运行绘图。 我需要在我的一个标签上绘制图表,而不是从背景中绘制。我该怎么设置呢? 继承我的代码:
private void tempButton_Click(object sender, EventArgs e)
{
Rectangle tabArea;
RectangleF tabTextArea;
Bitmap B = new Bitmap(500, 500);
tabArea = tabControl1.GetTabRect(0);
tabTextArea = (RectangleF)tabControl1.GetTabRect(0);
using (Graphics g = Graphics.FromImage(B))
{
int i1 = int.Parse(textBox1.Text);
int i2 = int.Parse(textBox2.Text);
int i3 = int.Parse(textBox3.Text);
int i4 = int.Parse(textBox4.Text);
float total = i1 + i2 + i3 + i4;
float deg1 = (i1 / total) * 360;
float deg2 = (i2 / total) * 360;
float deg3 = (i3 / total) * 360;
float deg4 = (i4 / total) * 360;
Font font = new Font("Arial", 10.0f);
SolidBrush brush = new SolidBrush(Color.Red);
Pen p = new Pen(Color.Black, 2);
p.Width = 0.5f;
tabArea = new Rectangle(textBox1.Location.X + textBox1.Size.Width + 250, 150, 500, 500);
Brush b1 = new SolidBrush(Color.Gold);
Brush b2 = new SolidBrush(Color.Silver);
Brush b3 = new SolidBrush(Color.DarkOrange);
Brush b4 = new SolidBrush(Color.Black);
g.DrawRectangle(p, tabArea);
g.DrawPie(p, tabTextArea, 0, deg1);
g.FillPie(b1, tabArea, 0, deg1);
g.DrawPie(p, tabTextArea, deg1, deg2);
g.FillPie(b2, tabArea, deg1, deg2);
g.DrawPie(p, tabTextArea, deg2 + deg1, deg3);
g.FillPie(b3, tabArea, deg2 + deg1, deg3);
g.DrawPie(p, tabTextArea, deg3 + deg2 + deg1, deg4);
g.FillPie(b4, tabArea, deg3 + deg2 + deg1, deg4);
//set picturebox3 as data source??
pictureBox3.Image = B;
}
}
正如你所看到的,当我点击测试按钮它绘制图表但在我的标签区域后面,我需要它绘制到我的一个标签上(我感觉这是超级简单的1行解决方案,但谷歌不是我的朋友atm)。 非常感谢提前!
答案 0 :(得分:1)
最简单的解决方案是创建所需尺寸的位图,为此位图创建Graphics
,执行绘图,然后将此位图设置为放置在选项卡上的自动调整大小的图片框的图像源。这是最干净的方式。
<强>更新强>
我在评论中注意到您的绘图代码没有经过深思熟虑。更改第一行如下:
Rectangle tabArea;
RectangleF tabTextArea;
Bitmap B = new Bitmap(500, 500, PixelFormat.Format32bppArgb);
tabArea = new Rectangle(0, 0, B.Width, B.Height);
tabTextArea = new RectangleF(0, 0, B.Width, B.Height);
另外:根据控制位置确定tabArea
并不是一个好主意。
最后:将“SizeMode”属性设置为“AutoSize”,使图片框拉伸到位图尺寸。