2010-08-30 20 views
2

EDIT: Click here for the code. Donc j'expérimente la construction d'interfaces avec MonoDevelop (version 2.4). J'essaie de m'habituer au concept Gtk de «conteneurs dans des conteneurs». J'ai créé une vbox avec deux boîtes, un menu sur la boîte du haut et un tableau sur le bas. J'ai mis la table pour avoir deux colonnes et cinq rangées. Sur les quatre premières rangées, j'ai mis une étiquette à gauche et une entrée à droite. Dans la cellule en bas à droite, j'ai mis un bouton. Il ressemble à ceci:Obtenir un dimensionnement de widget agréable dans MonoDevelop (Gtk #)

GUIBlah Application

Voici les choses que je suis aux prises avec:

1) Comment puis-je pas les colonnes de la table pour être d'une largeur égale? Amusant, quand j'ai ajouté juste les étiquettes, et n'avait pas encore ajouté les boîtes d'entrée, la colonne de gauche a utilisé seulement l'espace nécessaire pour les étiquettes. Maintenant, c'est 50/50 et ça ne bougera pas.

2) Comment aligner les étiquettes à droite, de sorte que le ":" final de leurs textes soit bien aligné et proche des boîtes de saisie? J'ai mis la propriété "Justifier" des étiquettes à "Droite" et a été apparemment ignorée.

3) Le code d'action pour les actions "Ouvrir" et "Fermer" dans le menu "Fichier" consiste à afficher une boîte de message modale avec un bouton OK. Mais le fait d'appuyer sur le bouton OK ne supprime pas la boîte de message, mais ferme uniquement la fenêtre de la boîte de message. Le code est:

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

Répondre

4

1) Définissez au moins un des widgets d'entrée pour «développer» et «remplir» horizontalement.

2) Définissez la propriété Xalign de l'étiquette sur 1.0. Justifier la mise en page du texte encapsulé, Xalign/Yalign contrôle la position du bloc entier dans la zone de l'étiquette.

3) Vous devriez détruire() la boîte de dialogue une fois que vous avez terminé. Vous pouvez également le masquer() et le réutiliser. Vous devriez également regarder en utilisant la méthode Run() de la boîte de dialogue - généralement quelque chose comme:

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

Astuce n ° 3 travaillé. :) Les conseils n ° 1 et n ° 2 ont eu un effet nul. Si vous voulez regarder de plus près, voici le code: http://users.vialink.com.br/jcastro/GUIBlah.tgz – JCCyC

+1

Re. # 2, vos étiquettes doivent être "remplir" mais pas "développer". Voir le screencast suivant: http://is.gd/ePzhZ - vous voulez les étiquettes pour remplir tout l'espace alloué, et les entrées pour remplir tout l'espace alloué et développer dans n'importe quel espace disponible. –

+0

Cela a fonctionné! Et j'ai résolu # 1 aussi ... la table avait le jeu de propriétés "Homogène"! Maintenant, c'est comme je le voulais. Merci! – JCCyC