Случайные ошибки графического интерфейса при использовании C # Mono в Mac OS X - PullRequest
1 голос
/ 20 апреля 2010

Я разрабатываю приложение на C # (Windows Forms), которое использует 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 голосов
/ 20 апреля 2010

Трудно что-то посоветовать, не видя реального кода, но прежде всего проверьте свою сборку с помощью MoMa на наличие проблем несовместимости (например, pinvoke), если вы в первую очередь разрабатывали свой проект для платформы .NET , Затем команда Mono утверждает, что поддержка формы Windows в режиме моно завершена:

Поддержка Windows Forms 2.0 завершена. На данный момент мы в основном просто исправляем ошибки и дорабатываем наш код.

Итак, вы можете попробовать запустить ваш проект в .NET и посмотреть, не исчезнет ли ошибка.

Что касается Gtk #. Я думаю, что лучше использовать gtk #, если основной ОС для вашего проекта является OSX. По крайней мере, вы сможете использовать некоторые специфичные для OSX вещи, например, интегрироваться в его панель инструментов. Посмотрите здесь для примера проекта с открытым исходным кодом Gtk #, который использует некоторые встроенные функции OSX и хорошо интегрируется в свою среду. Также имеется поддержка gtk # в конструкторе MonoDevelop.

P.S. Несколько интересных проектов Gtk # для игры: Beagle , Tomboy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...