2010-04-20 103 views
0

我正在C#(Windows窗體)中開發應用程序,該應用程序使用Mono在Mac OS X上運行。 它包含一些動態控件,例如包含一個自定義groupbox一些標籤和文本框,一個按鈕等。這些框都可以動態添加和刪除。在Mac OS X上使用C#Mono的隨機GUI錯誤

CustomGrpBxGroupBox繼承,這是我用的構造器:

public CustomGrpBx(Point CreateHere,Info Inf) 
    { 

     this.Name = Inf.Name; 

     this.Location = CreateHere; 
     CreateHere.Y = 10; 
     CreateHere.X = 10; 
     CreateHere.Y += 7; 

     Button btnPress = new Button(); 
     btnPress.Location = CreateHere; 
     btnPress.Size = new Size(40, 24); 
     btnPress.Text = Name; 
     btnPress.Enabled = false; 
     this.Controls.Add(btnPress); 
     CreateHere.X += 45; 
     CreateHere.Y += 2; 

     TextBox txtName = new TextBox(); 
     txtName.Location = CreateHere; 
     txtName.Size = new Size(75, 20); 
     txtName.Text = Name; 
     txtName.ReadOnly = true; 
     this.Controls.Add(txtName); 
     CreateHere.X += 80; 

     //More code here, but the same pattern as above 

     this.Size = new Size(CreateHere.X + 30, CreateHere.Y + 35); 
    } 

,問題就出現兩個當他們被創建,刪除,甚至當顯示一個消息框。 會發生什麼情況是,有時在呈現白色框時出現,或者某些標籤繪製不正確。有時當一個消息框出現時,它會首先打開,就像空白的5個傻瓜,你不能關閉它。

我做錯了什麼,我應該在每次創建後睡覺GUI線程,還是應該讓我自己的東西無效?或者我應該嘗試GTK#?

非常感謝在此輸入。

+0

非常標準的違反規則穿線的跡象。只在主UI線程中更新/顯示UI組件,請使用Control.Begin/Invoke()來封送調用。 – 2010-04-20 13:20:39

+0

我正在使用背景工作器,但那個只能在另一個類的靜態工作,而不是直接使用gui對象。 – 2010-04-20 13:24:19

回答

0

很難在沒有看到實際代碼的情況下提供建議,但首先,如果您主要開發了針對.NET平臺的項目,請首先檢查您的程序集是否存在不兼容問題(例如,pinvoke的問題)。然後,mono團隊宣稱Windows單窗口支持已完成:

對Windows Forms 2.0的支持已完成。在這一點上,我們主要是修復bug和拋光我們的代碼。

因此,您可以嘗試在.NET下運行您的項目,並查看錯誤是否仍然存在。

至於Gtk#。我認爲如果項目的主OS是OSX,最好使用gtk#。至少你可以使用一些OSX特定的東西,例如,集成在它的工具欄中。查看here,瞭解Gtk#項目的開源示例,該項目使用一些本機OSX功能並在其環境中良好集成。 MonoDevelop的設計者也支持gtk#。

P.S. 一些有趣的Gtk#項目玩: BeagleTomboy

+0

添加代碼示例 而且我在windows中使用相同的代碼獲得零問題,而且MoMa不會給我帶來任何錯誤:/ – 2010-04-20 13:21:43

+0

嗯,說實話,我沒有看到任何與您的錯誤相關的內容。 – n535 2010-04-20 13:40:02

+0

我會盡力在下次在Mac上獲取它的打印屏幕。 是否應該將prob報告給mono團隊? – 2010-04-20 13:41:32