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

РЕДАКТИРОВАТЬ: Нажмите здесь, чтобы увидеть код.

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

Приложение GUIBlah

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

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

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

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

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

person JCCyC    schedule 30.08.2010    source источник


Ответы (1)


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 ();
}
person Mikayla Hutchinson    schedule 30.08.2010
comment
Совет №3 сработал. :) Советы №1 и №2 не дали никакого эффекта. Если вы хотите посмотреть поближе, вот код: users.vialink.com.br /jcastro/GUIBlah.tgz - person JCCyC; 31.08.2010
comment
Ре. # 2, ваши метки должны быть заполнены, но не расширены. См. следующий скринкаст: is.gd/ePzhZ — вы хотите, чтобы ярлыки заполняли все выделенное пространство, а записи чтобы заполнить все выделенное пространство и расшириться в любое доступное пространство. - person Mikayla Hutchinson; 01.09.2010
comment
Это сработало! И я тоже решил # 1 ... у таблицы было установлено свойство «Однородный»! Теперь так, как я хотел. Спасибо! - person JCCyC; 01.09.2010
comment
Если вы разрабатываете в Ubuntu, ознакомьтесь с пакетом под названием DevHelp: packages.ubuntu.com/search ?keywords=devhelp Существуют отличные руководства по gtk, в которых затрагиваются эти концепции с изображениями и сопровождающим кодом. - person Jim Schubert; 01.12.2010
comment
DevHelp является частью GNOME. Он должен быть практически в любом дистрибутиве Linux. - person Mikayla Hutchinson; 02.12.2010