Hiya - 由我的一位朋友指出你們。我有一個MDI應用程序(C#,Winforms,.NET 2.0,VS2005,DevExpress 8.2),我的一個表單行爲非常奇怪 - 沒有正確重繪自身,它與同一個表單類的另一個實例重疊。MDI兒童刷新/重新繪製問題(C#,Winforms,.NET 2.0,VS2005,DevExpress 8.2)
表單包含一個自定義控件(其中包含各種DevExpress控件),並從基本窗體繼承而來(它本身是繼承的)。
由於表單繼承問題(舊的栗子),在構造函數中有一些控制重新排列正在進行。
問題1(次要):除非重新調整窗體大小,否則此控件重新定位/調整大小似乎不起作用,所以在重新排列後我將寬度向上和向下微移一個像素。醜,哈克,我真的很喜歡不必這樣做。
問題2(主要): 如果顯示窗體,然後使用API調用SetParent附加到MDI窗體,當我顯示第二個實例時,兩個窗體的各個部分在它們重疊的位置未正確繪製 - 最重要的是落後於現有的 - 當表格移動時,這個問題變得更糟,使得它們基本上不可用。其他兒童形式(如果存在)的不同類型似乎不受影響...
停止按鈕:我已經確定它不必是2個子窗體的實例。只有一個問題還存在問題 - 主要是在表單的邊緣,比如正在刷新的區域比表單本身小。
如果使用子窗體的.MDIParent屬性設置父項,則不會發生此問題 - 但由於窗體可能由託管在非.Net應用程序中的控件顯示,因此我們無法執行此操作。此外,即使現有的(不同類型的)子項最大化,並且只能使用SetParent,我也需要顯示非最大化的子窗體。
我已經嘗試刷新()在這種類型的所有形式(我有一個控制器,它們的列表),但沒有喜悅。我試圖從具有相同繼承結構的基本應用程序中重現此效果,但我不能。顯然這是關於表單的東西 - 因爲我昨天從頭重新創建表單,它仍然是一樣的,它必須是代碼 - 但是什麼?
我不是最熱門的表格繪畫活動等,所以我錯過了什麼?
你太......太大了,我咀嚼不了。 Prob1嘗試使用戶界面無效,以便重新繪製。和形式繼承...壞行爲。 – Gishu 2008-11-28 10:45:18
我試過Invalidate() - 這只是Refresh(),但延遲到一個方便的點。刷新()似乎並沒有做很多好事。 表單繼承是一個好主意*。這是VS的實現sux。嘆。控制似乎沒問題,這就是我被誘惑的原因。 – kpollock 2008-11-28 11:54:12