在Mac OS X上使用C#Mono的随机GUI错误

时间:2010-04-20 12:32:19

标签: winforms user-interface mono render

我正在使用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#?

非常感谢对此的投入。

1 个答案:

答案 0 :(得分:0)

在没有看到实际代码的情况下很难提出建议,但首先,如果您主要开发针对.NET平台的项目,请使用MoMa检查程序集是否存在不兼容问题(例如,pinvoke的)。然后,mono团队声称单声道窗口形式支持已完成:

  

已完成对Windows Forms 2.0的支持。在这一点上,我们主要是修复错误并抛光我们的代码。

因此,您可以尝试在.NET下运行项目并查看错误是否仍然存在。

至于Gtk#。我认为如果项目的主操作系统是OSX,最好使用gtk#。至少你可以使用一些特定于OSX的东西,例如,集成在它的工具栏中。查看here以获取Gtk#项目的开源示例,该项目使用一些本机OSX功能并在其环境中很好地集成。在MonoDevelop的设计师中也支持gtk#。

P.S。 一些有趣的Gtk#项目: BeagleTomboy

相关问题