2010-02-17 45 views
0

我有三個派生自Control ... Class1,Class2和Class3的類。我需要做什麼才能讓Paint消息發送到C#中的控件?

Class1是父項。它包含一個Class2對象的列表,每個對象又包含一個Class3對象的列表。

每個類都會覆蓋OnPaint方法來繪製自己。

Class1和Class2塗料本身很好,但Class3OnPaint永遠不會被調用。

我需要做什麼特別的事情(也許在Class2.OnPaint),以確保Class3的對象無效並且收到繪製消息?

回答

1

的OnPaint將只被調用,如果有已經失效的可見區域(可能是因爲它成了未遮蔽或因爲它是手動無效。)

你能後表現出的一些代碼簡化片段問題?

+0

我解決了這個問題。 計算出的Class3地點的座標由屏幕座標設置,而不是與其父級控件(Class2)相關......座標大於父母的大小,他們實際上始終不在屏幕上。 感謝您的幫助! – Sambo 2010-02-18 03:19:55

0

「包含列表」是否意味着(1)子控件已添加到父控件的.Controls,或者(2)您擁有控件列表作爲父控件中的變量?

如果(1)的情況下,你可以通過在父控件調用.Refresh()強制父控件以及所有子控件的油漆。調用.Invalidate()並不一定意味着控件或其子將立即被繪製。

如果(2)的情況下,你應該將控件添加到.Controls父控制,以確保他們將被繪。

0

在控件的構造函數中試試這個。

this.SetStyle(ControlStyles.UserPaint, true); 
+0

控制基類已經設置了這個。 – Josh 2010-02-17 23:50:39

0

我認爲控制必須使用他們每個人的Controls集合鏈接在一起,所以任何父控件應該有孩子的控制(S)添加到其控件集合,我認爲OnPaint事件如何得到填充。

0

我的不好!我沒有設置Class3控件相對於其父控件的位置,並且它的值大於父控件的大小,它們總是在屏幕外。

感謝您的幫助!

相關問題