我是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);
}
}
答案 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);
}