2008-09-25 6 views
0

J'ai un formulaire où j'ai deux boutons radio et deux contrôles interchangeables (composé d'un ListView et une poignée de boutons). Sur la base de quel bouton radio est sélectionné, je veux afficher le contrôle approprié à l'utilisateur.Meilleur moyen d'échanger deux contrôles .NET basés sur des boutons radio

Comme je le fais maintenant, je charge juste les deux contrôles et je mets en place une méthode OnRadioButtonSelectionChanged() qui est appelée au form load (pour définir l'état initial) et à chaque fois que la sélection est modifiée. Cette méthode définit simplement la propriété visible sur chaque contrôle à la valeur correcte.

Cela semble fonctionner assez bien, mais j'étais curieux de savoir s'il y avait une meilleure ou plus commune façon de le faire?

Répondre

3

Oui, c'est à peu près comme ça que je le fais. Je définirais l'événement CheckedChanged des deux boutons radio pour pointer vers un seul gestionnaire d'événements et placer le code suivant pour échanger le contrôle visible.

private void OnRadioButtonCheckedChanged(object sender, EventArgs e) 
{ 
    Control1.Visible = RadioButton1.Checked; 
    Control2.Visible = RadioButton2.Checked; 
} 
2

Eh bien, vous pouvez également utiliser la liaison de données ... semble un peu plus élégant pour moi. Supposons que vous ayez deux radiobuttons "rbA" et "rbB" et deux zones de texte "txtA" et "txtB". Et vous voulez avoir txtA visible seulement quand rbA est vérifié et txtB visible seulement quand rbB est cochée. Vous pouvez le faire comme ceci:

private void Form1_Load(object sender, EventArgs e) 
{ 
    txtA.DataBindings.Add("Visible", rbA, "Checked"); 
    txtB.DataBindings.Add("Visible", rbB, "Checked"); 
} 

Mais ... j'ai observé que l'utilisation UserControls au lieu de TextBoxes la fonctionnalité et casse je devrais aller lire sur le net .. pourquoi

PLUS TARD EDIT:

La liaison de données fonctionne dans les deux sens! : Si vous programmez (à partir d'un autre endroit) la visibilité de txtA à false, le rbA ne sera pas coché. C'est la beauté de Databinding.

+0

Intéressant, je n'avais pas encore rencontré de liaison de données (je suis encore assez nouveau pour le développement C#). Je vais devoir vérifier. –

Questions connexes