2015-05-12 31 views
0

这段代码在不同的委托中工作得很好,但当它被一个按钮触发时,它不起作用。 “Draw_Click”是一个名为“Draw”的按钮,它应该根据预先制作的点阵在屏幕上绘制图形。按下按钮触发时无法使DrawLine工作。

private void Draw_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 

     for (int t = 0; t <= numberOfPoints - 1; t++) 
     { 
      myInstance.DrawLine(pen, spiroArray[0, t], spiroArray[1, t], spiroArray[0, t + 1], spiroArray[1, t + 1]); 
     } 

    } 

但是,当我在这个类中有相同的代码,它工作正常(减去myInstance线)。

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
    } 

我用“e”而不是“myInstance”来使这个问题尽可能简短。

基本上,Form1_Paint有什么特别之处?我不应该让它在特殊的Form1Paint类之外绘制一些东西吗?如果我使用Form1_Paint,则无法控制它在何时执行绘图。基本上,我想有它更新图形用户更改参数等

的错误是“错误1名‘的DrawLine’在目前情况下不存在”

感谢您的帮助。

+0

它与'this'说明符有关;它可能指的是函数中错误的上下文。尝试使用其实际全名识别对象。 –

+0

@Jung-Paul在Winforms中使用'this'是很常见的,它指的是引发'Click()'事件的形式。 – DrewJordan

+0

@DrewJordan:好的,不知道。谢谢。 –

回答

0

我不确定我是否正确地得到您的问题,因为如果我按照我的想法阅读您的问题和代码,您应该得到的错误是“笔”在当前上下文中不存在。如果您使用相同的代码进行绘制,则它将在button_click或form_paint事件上起作用。 “this”仍然会引用表单,并使用它来实例化一个图形对象将使您可以在表单中的任何位置进行绘制。从按钮点击处理程序或表单绘制方法。但是,唯一能想到的是,如果你从未定义过钢笔,就会失败。这里是我使用的代码,当表单首次出现时,它画了一条红线,然后当我点击我放在同一表单上的按钮时画了一条黑线。

private void button1_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Black, 15, 10, 25, 20); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Red, 10, 10, 20, 20); 
    } 

在你的问题的陈述中必须有一些不正确的东西。

+0

我做了钢笔字段,因此它是范围内的类宽。所以,我不认为就是这样。 – user3832863

+0

不知道还有什么要告诉你。你说“我用'e'代替'myInstance'只是为了使这个问题尽可能简短。”所以我认为我没有看到实际上给你错误的代码。你在这里显示的代码在draw_click事件处理程序中应该可以在该处理程序或form_paint处理程序中正常工作。 – AgapwIesu