Получение красивого размера виджета в MonoDevelop (Gtk #) - PullRequest
2 голосов
/ 31 августа 2010

РЕДАКТИРОВАТЬ: Нажмите здесь для кода .

Итак, я экспериментирую с созданием интерфейса с MonoDevelop (версия 2.4).Я пытаюсь привыкнуть к концепции Gtk «контейнеры в контейнерах».Я создал vbox с двумя ... er ... ящиками, поместил меню в верхнее окно и таблицу в нижнее.Я установил в таблице два столбца и пять строк.В верхних четырех рядах я поместил метку слева и запись справа.В нижней правой ячейке я положил кнопку.Это выглядит так:

GUIBlah Application

Вот что я борюсь с:

1) Как получить столбцы таблицы НЕ равной ширины?Забавно, когда я добавил только метки и еще не добавил поля ввода, левый столбец использовал только пространство, необходимое для меток.Теперь 50/50, и он не сдвинется с места.

2) Как сделать так, чтобы надписи были выровнены по правому краю, чтобы окончательный текст ":" в их текстах был аккуратно выровнен и близок к полям ввода?Я установил для свойства «Justify» метки «Right» и, казалось бы, был проигнорирован.

3) Код действия для действий «Открыть» и «Закрыть» в меню «Файл» состоит в отображениимодальное окно сообщения с кнопкой ОК.Но нажатие кнопки ОК не закрывает окно сообщения, а только закрытие окна сообщения.Код:

(new Gtk.MessageDialog(this, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok,
                  "Open Action")).Show();

1 Ответ

4 голосов
/ 31 августа 2010

1) Установите по крайней мере один из виджетов Entry для «расширения» и «заполнения» по горизонтали.

2) Установите для свойства Xalign метки значение 1,0.Justify контролирует макет обернутого текста, Xalign / Yalign контролирует положение всего блока в области метки.

3) Вы должны уничтожить () диалоговое окно после того, как вы закончите с ним.В качестве альтернативы вы можете скрыть () и использовать его повторно.Вы также должны изучить использование метода Run () диалогового окна - обычно что-то вроде:

var dialog = new FooDialog(...);
try {
    dialog.Show();
    var response = (ResponseType) dialog.Run ();
    if (response == ResponseType.Ok) {
        //do stuff
    }
} finally {
    dialog.Destroy ();
}
...