2010-04-29 91 views
2

我从Java背景的,并试图端口,我写的C#康威生命游戏的简单版本,以学习语言。使用Visual Studio 2010 Express来创建曲面我可以绘制

在Java中,我把我的输出由JComponent的继承和覆盖paint()方法。然后,我的新画布类拥有可以读取/操作的模拟后端实例。然后,我可以获得WYSIWYG GUI编辑器(来自NetBeans的Matisse),让我可以直观地放置画布。

在C#中,我收集了,我需要重写的OnPaint()来绘制的东西,它(据我所知)需要我从继承的东西(我选择面板)。我无法弄清楚如何让Windows窗体编辑器让我放置我的自定义类。我也不确定我需要放置我的课程的代码在哪里。

我怎么能做到这一点,并把我所有的绘制代码到一个子类真我应该如何去这件事?谷歌缺乏简单的答案表明我错过了重要的东西。如果有人想在WPF中提出这样做​​的方法,我很好奇听到它。

感谢

回答

2

在Windows窗体,你可以简单地在任意控制通过调用其CreateGraphics方法来绘制。如果你有一个面板,例如,可以得出这样的:

using (var g = panel1.CreateGraphics()) { 
    g.DrawString("Hello World", 0, 0); 
} 

控件也有Paint事件。通过双击在属性窗口中的事件添加事件处理程序,并可以得出这样的:

private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    e.Graphics.DrawString("Hello World", 0, 0); 
} 

如果你想从一个控制派生,你可以做它的代码,或创建一个新的用户控件,并在代码和.Designer.cs文件中更改基类(虽然UserControl或只是Control都可以)。如果您已在设计器中拥有表单,则该表单已从Form派生,您可以重写OnPaint。

我的建议是:你通常不会需要创建一个新的类,如果你只是想画点什么。只需使用Paint事件。如果您需要立即重绘,请调用刷新以使控件重绘本身。这应该让你去。请注意,还有一个受保护的DoubleBuffered属性,它可以帮助您避免闪烁(将其设置为表单或您的派生控件)。

我不知道你会在WPF做什么。我从来不需要实际在WPF中手动绘制东西,因为布局和渲染引擎非常强大,并且您可以摆脱数据模板,控件模板等。WPF中的一点是您通常不会绘制任何东西,引擎吸引你。

+0

谢谢,这正是我需要知道的! – Joel 2010-04-29 18:40:01

+0

哈哈,谢谢。我是新来的:P – Joel 2010-05-01 14:14:50

相关问题