我来当微软专家:)
你把图画在哪里了?一个新的窗体啊,一个没有显示的窗体,怎么能看到呢?
这样改:
......
Form1 myfrm=new Form1();
myfrm.Show();
......
或者这样:
private void button1_Click(object sender,  System.EventArgs e)

Graphics g=Graphics.FromHwnd(this.Handle); 
Pen pn=new Pen(Color.Red, 2);
g.DrawLine(pn, 10, 12, 29, 10);
}

解决方案 »

  1.   

    我是这样的 Graphics g=this.createGraphics();
      

  2.   

    to :CForce() Form1 myfrm=new Form1();
    Graphics g=Graphics.FromHwnd(myfrm.Handle); 中的Form1就是当前窗体啊!当然是show出来了,所以this.Handle和(myfrm.Handle)“其实这些方法都是一回事 ”kalven(网络随缘)语
      

  3.   

    Form1是一个类。你的当前窗体是Form1的一个实例,而myfrm又是Form1的另外一个实例,两个不是一个相同的实例,所以应该调用myfrm.Show()方法。请尝试一下,谢谢。
      

  4.   

    完全同意楼上,再补充一点,你可以在运行完上面代码后在调用一下myfrm.refresh()方法
    就不用在onpaint(...)中画了.
      

  5.   

    用myfrm.refresh()还是不行,不信可以一试
      

  6.   

    wenzm, try this methodGraphics grp= Graphics.FromHwndInternal(myfrm.Handle);
      

  7.   

     谢谢以上各位的参与,大家说得还是对的!
    因为Form1 myfrm=new Form1()的话,myfrm又开辟了一个新的内存空间,所以它的handle已经改变了,用this.Handle就可以了
      

  8.   

    感谢您使用微软产品。这是因为如果你把code放在button1_Click中处理,当Form重画时,并不会再调用它,所以在它里面所画的东西会看不到,其实是画了一次,Form重画时被清除了。所以我们看不到。 而放在Form1_Paint中,在Form重画时会被自动调用,所以有效。
    微软全球技术中心  VC技术支持
    本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款 <http://www.csdn.net/microsoft/terms.shtm>。 
      

  9.   

    谢谢acptvc多次为我解答问题!