Winforms 在Mac OS X上使用C Mono时出现随机GUI错误
我正在用C Windows窗体开发一个应用程序,它使用Mono在MacOSX上运行。 它包含一些动态控件,例如包含一些标签和文本框的自定义groupbox、按钮等。可以动态添加和删除这些框 我的CustomGrpBx继承自GroupBox,这是我使用的构造函数:Winforms 在Mac OS X上使用C Mono时出现随机GUI错误,winforms,user-interface,mono,render,Winforms,User Interface,Mono,Render,我正在用C Windows窗体开发一个应用程序,它使用Mono在MacOSX上运行。 它包含一些动态控件,例如包含一些标签和文本框的自定义groupbox、按钮等。可以动态添加和删除这些框 我的CustomGrpBx继承自GroupBox,这是我使用的构造函数: public CustomGrpBx(Point CreateHere,Info Inf) { this.Name = Inf.Name; this.Location = Create
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);
}
在创建和删除它们时,甚至在显示messagebox时,都会出现问题。
发生的情况是,有时在渲染时会出现白色框,或者某些标签绘制不正确。有时,当一个消息框出现时,它首先会像5个假人一样打开,这些假人都是空白的,你无法关闭
我是否做错了什么,是应该在每次创建之后让GUI线程休眠一点,还是应该自己让东西失效?还是我应该试试GTK
非常感谢您在这方面的投入。在没有看到实际代码的情况下,很难给出建议,但首先,如果您主要开发了针对.NET平台的项目,请检查您的程序集是否存在不兼容问题,例如pinvoke。然后,mono团队声称mono中的windows窗体支持已经完成: 对Windows Forms 2.0的支持已完成。在这一点上,我们主要只是修复bug和润色代码 因此,您可以尝试在.NET下运行您的项目,并查看错误是否仍然存在 至于Gtk。我认为如果项目的主要操作系统是OSX,那么使用gtk会更好。至少你可以使用一些OSX特有的东西,例如,集成在它的工具栏中。寻找一个Gtk项目的开源示例,它使用一些本机OSX特性,并在其环境中集成良好。MonoDevelop的designer中也支持gtk 附言。 一些有趣的Gtk项目: ,
违反线程规则的标准标志。仅更新/显示主UI线程中的UI组件,使用Control.Begin/Invoke封送调用。我使用backgroundworker,但该工具只处理另一个类中的静态组件,而不直接处理gui对象。添加了代码示例,我在windows中使用相同的代码时不会出现任何问题,并且MoMa不会给我任何错误:/Well,老实说,我看不到任何与你的错误相关的东西。下次我在mac电脑上时,我会尝试得到它的打印屏幕。prob bug应该向mono团队报告吗?我不知道,首先,尝试在Linux机器上运行你的应用程序,例如,它在mono中看起来不是一个bug,代码太简单了,真的。本质上,您只是在表单中动态添加控件,这是一个常见的场景。我想虫子在另一个地方。但一切皆有可能。