2010-10-26 6 views
0

J'ai un formulaire avec plusieurs zones de texte qui sont des chemins de fichier pour le programme d'importer des données. À l'heure actuelle, ils sont contrôlés pour une longueur non nulle par ce qui suit:C# Zone de texte Fichier Importer

//this code imports the files required by the user, as specified in the 
    //file path text boxes 
    private void btImport_Click(object sender, EventArgs e) 
    { 
     bool hasPath = false; 
     foreach (TextBox box in this.gbPaths.Controls.OfType<TextBox>().Where(tb => tb.Text.Length > 0)) 
     { 
      hasPath = true; 
      //import code 
     }//end foreach 

     if (!hasPath) 
     { 
      MessageBox.Show("You must enter at least one file path."); 
     }//end if 
    }//end import code 

Ce que je me demande est ce que je peux remplacer la pièce //import code avec quelque chose comme:

if(tb.Name = "txtAvF") then...

ou similaire, ou faire Je dois le faire en dehors de la boucle foreach? Merci d'avance. Faites-moi savoir si je dois clarifier quelque chose.

+1

Pouvez-vous préciser ce que vous voulez faire exactement? Quelle est la signification de "txtAvF"? Quelle est la nature du processus d'importation? – Ani

+0

Il va importer à partir de quelques sources différentes simplement parce qu'il doit y avoir une comparaison entre les informations réelles et les prévisions, et ces données sont stockées dans quelques fichiers différents. Ainsi, en parcourant la boucle, il doit déterminer dynamiquement lequel des six fichiers possibles est importé. Ce devrait probablement être un cas-switch, pas un si. Ma faute. – mispecialist

Répondre

0

Si vous voulez vérifier si la zone de texte est l'un des plus sur la forme (que je pense que vous êtes), vous êtes == qui (taken from MSDN)

the operator == tests for reference equality by determining if two references indicate the same object

c'est donc ce que vous cherchez:

if(box == textBox1 && !string.IsNullOrEmpty(box.Text)) 
{ 
     // Import Textbox1 
} 
else if(box == textBox2 && !string.IsNullOrEmpty(box.Text)) 
{ 
     // Import Textbox2 
} 
else if (box == textBox3....) 
+0

Merci pour votre entrée PostMan, mais l'instruction foreach passe par chacune des zones de texte du formulaire et détermine si elles ne sont pas vides; ce que je dois faire maintenant est de déterminer quelle boîte est actuellement interrogée pour la longueur zéro, et si elle contient du texte, exécutez un code d'importation spécifique pour le fichier appartenant à cette zone de texte. Problème étant, je ne sais pas comment déterminer quelle zone de texte est actuellement en cours de requête. – mispecialist

+0

Eh bien ce code teste pour voir si la référence de 'box' est la même référence que' txtAvf', voulez-vous quelque chose de plus dynamique? – PostMan

+0

Ce qu'il faut faire est d'aller: Est-ce que testbox 1 est vide? Non? Puis importez le fichier 1 (chemin enregistré dans la zone de texte 1) La zone de texte 2 est-elle vide? Non? Puis importez le fichier 2 La zone de texte 3 est-elle vide? Oui? Continuer ... La zone de texte 4 est-elle vide? Non? Puis importez le fichier 4 Et ainsi de suite jusqu'à ce qu'il n'y ait plus de zone de texte. – mispecialist

0

Vous devriez le faire à l'intérieur de la boucle. Comme ceci:

if (box.Name == "txtAvF") 
    box.Text = "What you want"; 

Mais la mise hasPath intérieur de la boucle ne détient que l'état de votre dernier chemin. Vous devez également déplacer le code MessageBox à l'intérieur de la boucle.

0

L'affectation hasPath me semble correcte; il est défini pour n'importe quelle zone de texte, et s'il n'est pas défini à la fin de la boucle, un message s'affiche. Cela rime bien avec le texte ainsi affiché. Déplacer l'appel MessageBox dans la boucle entraînerait l'affichage de la boîte de dialogue (ou affichage erroné), au moins comme le code est implémenté maintenant, puisque le OfType <>(). Where() garantit que toutes les zones de texte itérées ont au moins du contenu.

(je voudrais ajouter ceci comme commentaire à @Xaqron mais ne pas la réputation nécessaire encore.)

Questions connexes