无法从班级内画线 - 为什么不画画?

时间:2017-12-26 05:26:56

标签: c# class draw

我是C#的新手,我正在尝试使用OOP和类。我试图绘制一个简单的正弦波和一条轴线(X轴)。我在“main - Form1”中得到了类似的代码,但我无法从类中获取它的形式。它什么都没画!代码确实编译。

我错过了什么?我能做得更好吗?

我通过点击按钮调用该课程 -

Drawclick(object sender, EventArgs e)
  {  DrawSine Sine1 = new DrawSine(950);
  }

这是班级

class DrawSine:Form1
{
        private float sinex=0;//set up variables for sine
        private float countx = 0;
        private float siney = 0;
        private float sinex1=0;
        private float siney1=0;
        public float offset;
        public float scalex;
        public float scaley;

        public DrawSine(int widthG)
        {
            Graphics Graphsine = this.CreateGraphics();//declare sine
            Graphics Graphline = this.CreateGraphics();//declare axis
            Pen Graphpen = new Pen(Brushes.Black, 1.0F);
            Graphline.DrawLine(Graphpen, 0, 200, widthG, 200);//draw line 
                                                0,200 to end of form,200

            int WidthG = widthG; 
            do  //draw sine wave left to right
            {
                sinex += scalex * 6.28f / widthG;
                siney = (float)Math.Sin(sinex);
                Graphsine.DrawLine(Graphpen, sinex1, siney1 + offset, 
                                   countx, siney * 100 + offset);
                sinex1 = sinex;
                sinex1 = siney * 100;
                countx += 1;
            }
            while (countx <= widthG);

        }

}

1 个答案:

答案 0 :(得分:0)

这可能会在表单上绘制一些内容,但您无法看到,因为在加载事件发生后不久,将会有一个 String Names[]= {"John","Mark","Jo","Peter"}; Double Values[]= {1.1,1.2,1.3,1.4}; Map<String, Double> map = new HashMap<String, Double>(); for (int i = 0; i < Values.length; i++) { map.put(Names[i], Values[i]); } 事件和一个PaintBackground,因为表单已呈现。

这些事件将有效删除表单上的所有内容。

2补救措施:

将上述绘制代码封装在一个方法中(比方说PaintEvent

一个,覆盖OnPaint事件并在那里编写代码。您的绘画将在表单调整大小或重绘时保持不变。

DrawSine()

两个,使用表单protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); DrawSine(e, 950); } 事件

Shown

您原来的方法:

private void Form1_Shown(object sender, EventArgs e)
{
    DrawSine(null, 950);
}