我正在使用C#(Windows窗体)开发一个应用程序,它使用Mono在Mac OS X上运行。 它包含一些动态控件,例如包含一些标签和文本框的自定义组框,按钮等。这些框都可以动态添加和删除。
我的CustomGrpBx
继承自GroupBox
,这是我使用的构造函数:
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 :(得分:0)
在没有看到实际代码的情况下很难提出建议,但首先,如果您主要开发针对.NET平台的项目,请使用MoMa检查程序集是否存在不兼容问题(例如,pinvoke的)。然后,mono团队声称单声道窗口形式支持已完成:
已完成对Windows Forms 2.0的支持。在这一点上,我们主要是修复错误并抛光我们的代码。
因此,您可以尝试在.NET下运行项目并查看错误是否仍然存在。
至于Gtk#。我认为如果项目的主操作系统是OSX,最好使用gtk#。至少你可以使用一些特定于OSX的东西,例如,集成在它的工具栏中。查看here以获取Gtk#项目的开源示例,该项目使用一些本机OSX功能并在其环境中很好地集成。在MonoDevelop的设计师中也支持gtk#。