2008-09-01 13 views
3

THis est un suivi à ma précédente question « Font-dependent control positioning. » Il est une tentative de résoudre le vrai problème derrière cette question, peut-être de manière différente que celle que je vous demandais.commandes de positionnement au milieu d'un CheckBox

Exemple de l'énoncé du problème: Je veux une case à cocher qui dit "Ajuster les prix par <X><Y> après le chargement," où <X> est un nombre --- réglable avec NumericUpDown --- et <Y> est soit "pour cent" ou "dollars", avec les choix effectués par un ComboBox. Ce sera sur une seule ligne.

La complication: Je veux être en mesure de changer mes polices pour tous ces contrôles (les mettre essentiellement à System.Drawing.Fonts.MessageBoxFont, qui est Tahoma 8 pt sous Windows XP/etc et Segoe UI 9 pt sur Vista.), Sans gâcher ma mise en page, qui avec mon paradigme Position -property-setting actuel ne fonctionne pas.

Plus généralement, je voudrais les contrôles à dynamiquement disposés d'une manière de police indépendante, de sorte que la <X>NumericUpDown s'insère parfaitement dans l'espace entre « par » et le <Y>ComboBox, et de même le <X>ComboBox tient dans par rapport à la <X>CheckBox et la chaîne « après le chargement » à sa droite.

La partie tout le monde semble manquer: Tout cela est imbriqué dans un CheckBox. Donc, idéalement, en cliquant sur les mots « après le chargement » doit cocher/décocher la case à cocher, et d'en tirer ce petit rectangle de surbrillance autour « Ajuster les prix de                     après le chargement. » Donc, il suffit de taper un Label supplémentaire à la fin ne fonctionne pas, car alors il ne bascule pas le CheckBox; de même, essayer de panser les choses en connectant un tel évènement Click ne produira pas le rectangle de surbrillance désiré.

Solutions? À ce stade, je pense soit:

  1. Repenser le problème, en quelque sorte, peut-être avec une solution laide comme deux lignes distinctes de texte: « Ajuster les prix trouvés après le chargement » (CheckBox), « quantité de réglage: "(NumericUpDown et ComboBox). C'est vraiment mauvais parce que ma boîte d'options est absolument pleine d'options de ce type (c'est-à-dire le type dans l'exemple), donc il faudrait au moins doubler en taille verticale.

  2. Une sorte de contrôle personnalisé? SplittableCheckBox?Une sorte de magie avec un contrôle TableLayout? (Que Jolie échec à « tout le monde partiel semble manquer.)

  3. Abandonnez et soit revenir à MS Sans Serif, ou utiliser Tahoma uniformément ou package Segoe UI avec mon application, manque de respect ainsi les polices par défaut du système .

  4. (Nouveau, par l'intermédiaire modifier) ​​Passer à WPF, si quelqu'un peut me convaincre qu'il prend en charge ce scénario exactement.

Répondre

0

Si vous avez plusieurs options qui suivent cette mise en page, pourquoi ne pas créer un utilisateur Le contrôle utilisateur contiendra le CheckBox, un NumericUpDown, un ComboBox et une étiquette pour le "après chargement". Vous pouvez remplacer OnFontChanged pour ajuster l'emplacement des contrôles en fonction du rendu du texte avec la police donnée. Ajouter un EventHandler à l'étiquette pour cocher/décocher le CheckBox. Comme le rectangle de mise au point entoure toutes les commandes, vous devriez pouvoir donner le focus à l'utilisateur lorsque l'un de ses contrôles internes est cliqué.