我有三個派生自Control ... Class1,Class2和Class3的類。我需要做什麼才能讓Paint消息發送到C#中的控件?
Class1是父項。它包含一個Class2對象的列表,每個對象又包含一個Class3對象的列表。
每個類都會覆蓋OnPaint方法來繪製自己。
Class1和Class2塗料本身很好,但Class3OnPaint永遠不會被調用。
我需要做什麼特別的事情(也許在Class2.OnPaint),以確保Class3的對象無效並且收到繪製消息?
我有三個派生自Control ... Class1,Class2和Class3的類。我需要做什麼才能讓Paint消息發送到C#中的控件?
Class1是父項。它包含一個Class2對象的列表,每個對象又包含一個Class3對象的列表。
每個類都會覆蓋OnPaint方法來繪製自己。
Class1和Class2塗料本身很好,但Class3OnPaint永遠不會被調用。
我需要做什麼特別的事情(也許在Class2.OnPaint),以確保Class3的對象無效並且收到繪製消息?
的OnPaint將只被調用,如果有已經失效的可見區域(可能是因爲它成了未遮蔽或因爲它是手動無效。)
你能後表現出的一些代碼簡化片段問題?
「包含列表」是否意味着(1)子控件已添加到父控件的.Controls
,或者(2)您擁有控件列表作爲父控件中的變量?
如果(1)的情況下,你可以通過在父控件調用.Refresh()
強制父控件以及所有子控件的油漆。調用.Invalidate()
並不一定意味着控件或其子將立即被繪製。
如果(2)的情況下,你應該將控件添加到.Controls
父控制,以確保他們將被繪。
在控件的構造函數中試試這個。
this.SetStyle(ControlStyles.UserPaint, true);
控制基類已經設置了這個。 – Josh 2010-02-17 23:50:39
我認爲控制必須使用他們每個人的Controls集合鏈接在一起,所以任何父控件應該有孩子的控制(S)添加到其控件集合,我認爲OnPaint事件如何得到填充。
我的不好!我沒有設置Class3控件相對於其父控件的位置,並且它的值大於父控件的大小,它們總是在屏幕外。
感謝您的幫助!
我解決了這個問題。 計算出的Class3地點的座標由屏幕座標設置,而不是與其父級控件(Class2)相關......座標大於父母的大小,他們實際上始終不在屏幕上。 感謝您的幫助! – Sambo 2010-02-18 03:19:55