Автор Тема: Gtk#: не отображаются виджеты  (Прочитано 1811 раз)

Оффлайн Mixim

  • Участник
  • *
  • Сообщений: 1
Добрый день. Разрабатываю один кросплатформенный проект на языке C#. Добавил помимо главного окна несколько вспомогательных. На главном окне все отображается ровно так, как и должно, а вот виджеты на некоторых вспомогательных окнах живут своей жизнью. Всего в проекте 4 вспомогательных формы, которые предполагается сделать модальными.
Ладно, накладываем в Monodevelop на одну из окон(MyWindow) объект Fixed, Button, Label, Entry и в главном окне пишу обработчик события нажатия на кнопку button1:
protected void OnButton1Clicked (object sender, EventArgs e)
{
/*using (MyWindow tmp=new MyWindow())
{
tmp.ShowAll();
}*/
MyWindow tmp=new MyWindow();
tmp.Show ();
}
Делаю очистку решения, перекомпилирую, запускаю, нажимаю на button1, но вместо указанных элементов управления MyWindow, вижу пустое окно! Думал, что сам случайно или MonoDevelop установил свойство Visible в false, но нет. Провозился минут 30 в попытках перестроить проект и увидеть то, что должен был увидеть, но все попытки оказались безрезультатными.
Решил попробовать точно таким же образом открыть другое окно, которое также будет являться вспомогательным - все виджеты видны. Хорошо, открываю файл Main.cs, чтобы в процессе загрузки приложения открывалось MyWindow, а не MainWindow:
public static void Main (string[] args)
{
Application.Init ();

/*MainWindow win = new MainWindow ();
win.Fullscreen();*/

MyWindow win=new MyWindow();
win.Fullscreen();

Application.Run ();
}
Но вновь MyWindow открывается без какого-либо виджета!
На этом форуме ЗДЕСЬ уже задавался аналогичный вопрос, но по Gtk+(Gtk# - это надстройка на Gtk+), а ответа на него человек так и не получил. Сам он пишет:
Цитировать
Эксперименты показали что ошибку скорее всего генерирует процесс, который обновляет надпись на виджете. Для решения этой проблемы, я вынес код обновления в отдельную функцию. Пока всё работает правильно, посмотрим что будет дальше
Но у меня надпись на виджете дефолтная, так что это по-моему не то.
Пробовал удалить окно из проекта, вручную удалить все файлы окна, создать новое с таким же именем, открыть заново проект и MonoDevelop и иногда в "Пользовательском интерфейсе" видел два одноименных окна MyWindow. Удаляю одно из них, а в итоге избавляюсь от обоих. Или еще смешно: удалил окно из проекта, удалил все файлы окна(и gui и исполняемые), закрываю и снова открываю проект, создаю одноименное окно, загружается Дизайнер в котором я вижу все виджеты удаленного ранее окна - откуда ???
Начал с помощью блокнота просматривать файлы окна MyWindow и обнаружил, что в папке "gtk-gui" файл "MyProject.MyWindow.cs" практически пуст:
namespace MyProject
{
public partial class AccessChecks_Window
{
protected virtual void Build ()
{
global::Stetic.Gui.Initialize (this);
// Widget ElectronicPay.MyWindow
this.Name = "ElectronicPay.MyWindow";
this.Title = global::Mono.Unix.Catalog.GetString ("MyWindow");
this.WindowPosition = ((global::Gtk.WindowPosition)(4));
if ((this.Child != null)) {
this.Child.ShowAll ();
}
this.DefaultWidth = 400;
this.DefaultHeight = 300;
this.Show ();
}
}
}
А весь код элементов управления MyWindow расположился в файле "gui.stetic"! Предполагаю, что  именно в этом и ошибка, но почему MonoDevelop так разместил GUI-код понятия не имею.
Подскажите пожалуйста, с чем может быть связана проблема и как от нее избавиться?
« Последнее редактирование: 22.06.2012 04:59:54 от Mixim »

Оффлайн Kemper

  • Участник
  • *
  • Сообщений: 572
  • Simply Linux
Re: Gtk#: не отображаются виджеты
« Ответ #1 : 23.06.2012 23:38:52 »
Вообще Gtk# это целая пляска, а переброска проектов из mono в виндовую .Net  вообще за гранью добра и зла. Советую вам  завести баг в багзиллу, и желательно завести запрос на обновление mono до третьей версии.
Alt Linux - Поддержим Российского производителя!