2010-04-29 56 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

相關問題