2010-08-30 2 views
2

EDIT: Click here for the code.Получение красивого размера виджета в MonoDevelop (Gtk #)

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

GUIBlah Application

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

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

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

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

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

ответ

4

1) Установите по крайней мере один вид виджетов ввода, чтобы «развернуть» и «заполнить» по горизонтали.

2) Установите для свойства Xalign метки значение 1.0. Выравнивание управляет компоновкой завернутого текста, 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(); 
} 
+0

Совет № 3 работал. :) Советы №1 и №2 имели нулевой эффект. Если вы хотите более внимательно посмотреть, вот код: http://users.vialink.com.br/jcastro/GUIBlah.tgz – JCCyC

+1

Re. # 2, ваши метки должны быть «заполнены», но не «расширяться». См. Следующий скринкаст: http://is.gd/ePzhZ - вы хотите, чтобы метки заполняли все выделенное пространство, а записи заполняли все пространство, выделенное и расширяемое в любое доступное пространство. –

+0

Это сработало! И я решил №1 тоже ... в таблице было свойство «Однородное»! Теперь я так хочу. Благодаря! – JCCyC

Смежные вопросы