Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 在Mac OS X上使用C Mono时出现随机GUI错误_Winforms_User Interface_Mono_Render - Fatal编程技术网

Winforms 在Mac OS X上使用C Mono时出现随机GUI错误

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

我正在用C Windows窗体开发一个应用程序,它使用Mono在MacOSX上运行。 它包含一些动态控件,例如包含一些标签和文本框的自定义groupbox、按钮等。可以动态添加和删除这些框

我的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);
    }
在创建和删除它们时,甚至在显示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,代码太简单了,真的。本质上,您只是在表单中动态添加控件,这是一个常见的场景。我想虫子在另一个地方。但一切皆有可能。