2009-09-04 7 views
1

Fondamentalement, la propriété d'étiquette d'un bouton est le nom d'une liste déroulante existante dont j'ai besoin de référencer dynamiquement. C'est une fonction générique pour gérer plusieurs boutons. AideC#: Convertir une chaîne en une référence d'objet

private void SQLButton(object sender, EventArgs e) 
{ 
    magic(((Button)sender).Tag.ToString()); 
} 

private void magic(string currentcombo) 
{ 
    string CurrentText = (ComboBox).(currentcombo).Text; 
} 

Répondre

6

Vous pouvez définir la propriété Tag sur le ComboBox réel et éviter complètement votre problème.

//code when defining your button... 
{ 
    sqlButton.Tag = comboBoxA; //instead of comboBoxA.Name 
} 

private void SQLButton(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    ComboBox comboBox = button.Tag as ComboBox; 

    if (comboBox == null) 
    {...} 
    else 
    { 
     magic(comboBox); 
    } 
} 

private void magic(ComboBox currentcombo) 
{ 
    string CurrentText = currentcombo.Text; 
} 
+0

comment puis-je faire cela ?, qui semble être une approche intéressante. –

+0

Tag peut être n'importe quoi. Ainsi, lorsque vous définissez le tag de votre bouton sur comboBoxA.Name, utilisez simplement comboBoxA à la place. –

+0

Donc, je peux utiliser comboBoxA.Text et cela va récupérer le contenu actuel et le transmettre à la méthode; private void SQLButton (expéditeur d'objet, EventArgs e) {magic ((Expéditeur (Button)) .Tag);} –

2

Si vous avez la valeur d'ID de chaîne d'un contrôle, vous pouvez utiliser FindControl pour obtenir une référence au contrôle.

Quelque chose comme ...

Button btn = (Button)FindControl("some_id"); 
4

Je pense Je comprends ce que vous êtes après -

Vous voulez changer votre routine "magique" à quelque chose comme:

private void magic(string currentCombo) { 
    ComboBox box = this.Controls.Find(currentCombo) as ComboBox; 
    if(box != null) { 
     // You can do your "work" here... 
     string currentText = box.Text; 
    } 
} 
+0

Devrait être un (ComboBox) -cast au lieu d'utiliser comme ... vous ne voulez pas obtenir une exception NullRef au lieu d'une exception Cast – tanascius

+0

Je préfère cette façon, personnellement. J'ai ajouté un chèque nul pour vous, cependant. –

+0

Ouais, avec null-check je l'aime plus, aussi :) – tanascius

1

Je ne sais pas si ses winforms ou asp.net. Je suppose qu'il est winforms

Vous pouvez utiliser this.Controls(theNameofTheControl) au lieu de magie.

1

Jetez un oeil à la méthode Controls.Find, pour obtenir l'instance du contrôle en utilisant le nom.

0

Si currentcombo paramter en fonction magique est l'identifiant pour le contrôle que vous allez changer alors utiliser la fonction de FindControl de Page: méthode

string CurrentText = ((ComboBox)FindControl(currentcombo)).Text; 

Page.FindControl() recherche le conteneur de nommage de page pour un contrôle serveur avec l'identifiant spécifié.

+0

FindControl n'existe pas dans le contexte curren? (Suis-je manque une référence using System;? en utilisant System.Collections.Generic, using System.ComponentModel; using System.Data; en utilisant System.Drawing, en utilisant System.Linq, utilisant System.Text; using System.Windows.Forms; –

Questions connexes