C# 使用图形而不单击按钮

C# 使用图形而不单击按钮,c#,asp.net,.net,visual-studio-2010,C#,Asp.net,.net,Visual Studio 2010,我有一个表格,其中演示了三种类型的汇编命令(R、i、J)的百分比的饼图。为此,我正在使用图形库。到目前为止,我的应用程序在单击按钮后显示图表和percent foreach命令。我需要做的是不用点击按钮。我尝试了一些替代方案,但什么也没想到。只有百分比显示,直到我按下按钮,饼图才显示。下面显示了我的一些初始代码,这些代码与button_click一起工作,但也显示了我表单的图片。 有什么帮助吗 public float d1; public float d2; publi

我有一个表格,其中演示了三种类型的汇编命令(R、i、J)的百分比的饼图。为此,我正在使用图形库。到目前为止,我的应用程序在单击按钮后显示图表和percent foreach命令。我需要做的是不用点击按钮。我尝试了一些替代方案,但什么也没想到。只有百分比显示,直到我按下按钮,饼图才显示。下面显示了我的一些初始代码,这些代码与button_click一起工作,但也显示了我表单的图片。 有什么帮助吗

    public float d1;
    public float d2;
    public float d3;

 private void button1_Click(object sender, EventArgs e)
    {
        SolidBrush b1 = new SolidBrush(Color.Blue);
        SolidBrush b2 = new SolidBrush(Color.Red);
        SolidBrush b3 = new SolidBrush(Color.LawnGreen);
        Rectangle rect = new Rectangle(60, 10, 200, 200);
        Pen p = new Pen(Color.Black);

        graphics.DrawPie(p, rect, 0, d1);
        graphics.FillPie(b1, rect, 0, d1);
        graphics.DrawPie(p, rect, d1, d2);
        graphics.FillPie(b2, rect, d1, d2);
        graphics.DrawPie(p, rect, d1 + d2, d3);
        graphics.FillPie(b3, rect, d1 + d2, d3);
        comboBox1.SelectedIndex = 0;

        label1.Text = "R_type   (" + (d1 * 100 / 360).ToString() + "%)";
        label2.Text = "I_type   (" + (d2 * 100 / 360).ToString() + "%)";
        label3.Text = "J_type   (" + (d3 * 100 / 360).ToString() + "%)";
    }


当我试图将Button1_click()方法中包含的代码复制到一个新的void方法时,只显示了带有百分比的面板,而没有显示图表。谢谢

以下是我在自己的代码中获取图形对象的代码片段:

Graphics g = CreateGraphics();
short margin = global::FrakoPlanner.NET.Properties.Settings.Default.Margin;
                cellHeight = Convert.ToInt32(g.MeasureString("Font", this.TextFont).Height) + margin;
g.Dispose();

关键是,如果要在按钮单击处理程序中绘制,则需要创建图形对象。

我几乎可以肯定,您没有意识到实际的问题

问题不在于它只在按钮的事件处理程序中工作。 这是一个地理(在处理器内部)的区别,这并不重要

问题在于执行这些绘图操作的时间

我假设“在按钮的事件处理程序之外”意味着在一个地方(可能是表单的构造函数)里面,它甚至在可能呈现之前就被调用了

简易解决方案答案(不包括任何见解)

  • 只需在表单中添加一个计时器组件
  • 为其
    勾选事件创建事件处理程序
  • 将其
    Enabled
    属性设置为
    true
  • 将其
    Interval
    属性设置为。。说200(意思是毫秒)
  • 在步骤2创建的事件处理程序中编写绘图代码
  • 以编程方式禁用事件处理程序内的计时器(在事件处理程序的顶部或底部)
健康解决方案

  • 阅读有关创建自定义控件(非用户控件)的信息
  • 创建一个CustomControl并将其称为MyPieRenderer