我来自Java背景,试图移植一个简单版本的Conway的生命游戏,我写信给C#以学习语言。
在Java中,我通过继承JComponent并覆盖paint()来绘制输出。然后我的新画布类有一个模拟后端的实例,它可以读取/操作。然后我就可以使用WYSIWYG GUI编辑器(来自NetBeans的Matisse)来允许我在视觉上放置画布。
在C#中,我已经收集到我需要重写OnPaint()来绘制东西,据我所知,这要求我继承某些东西(我选择了Panel)。我无法弄清楚如何让Windows窗体编辑器让我放置我的自定义类。我也不确定生成的代码在哪里放置我的课程。
我怎么能这样做,并且把我的所有绘图代码放到一个子类中我真的应该怎么做呢?谷歌缺乏简单的答案表明我在这里缺少一些重要的东西。如果有人想在WPF中建议一种方法,我很想听听它。
由于
答案 0 :(得分: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事件。如果需要立即重绘,请调用Refresh以使控件重绘。这应该让你去。请注意,还有一个受保护的DoubleBuffered属性,可以帮助您避免闪烁(为表单或派生控件设置它)。
我不确定你会在WPF中做什么。我从来不需要在WPF中手动绘制一些东西,因为布局和渲染引擎非常强大,你可以放弃数据模板,控制模板等.WPF中的一点是你通常不会绘制任何东西,引擎为你吸引。