2009-04-24 12 views
1

J'ai créé une boîte de dialogue qui contient 3 onglets. Les contrôles sur les onglets 1 & 2 ont une validation à l'aide de l'événement Validating(). L'utilisateur travaillera principalement sur les onglets 1 & 3, ne montrant jamais l'onglet 2 sauf si nécessaire. Tous les contrôles des onglets 1 & 2 sont liés à un objet BindingSource.Comment accéder à la valeur du contrôle lié sur un onglet non affiché pour validation?

De mon observation, il semble que les contrôles liés ne sont pas initialisés sur l'onglet 2 jusqu'à ce que l'onglet est affiché. Par conséquent, la validation de l'ensemble du formulaire échoue car ces contrôles n'ont aucune valeur. La valeur TextBox.Text est "" lorsque Validating() est appelée la première fois et somevalue après avoir affiché l'onglet.

J'ai essayé de « pré-initialisation » les commandes Tab 2 de l'événement Load (par exemple TextBox.Value = 'test';, mais a trouvé la valeur a été effacée avant de valider() a été appelé.

Je songeais sur la vérification de la valeur de . BindingSource.Current, mais cette solution particulière a de multiples pièges, notamment le contenant de BindingSource une valeur non validée

Quelle étape (s) dois-je prendre soit:

  • les commandes avant initialize t hey sont affichés
  • obtenir la valeur appropriée (contrôle ou BindingSource) pour Validation()

Répondre

0

Bien que je ne pouvais pas trouver des sources faisant autorité pour confirmer, il semble que les contrôles liés ne sont pas initialisés jusqu'à ce qu'ils soient rendus visibles. J'ai été en mesure de confirmer un comportement similaire sur mon onglet affiché par défaut en cachant une zone de texte. La valeur .Text du contrôle était "" jusqu'à ce que le contrôle soit rendu visible, date à laquelle la valeur a été renseignée avec ma valeur attendue.

A question sur les forums Microsoft a en outre confirmé ce que je ressentais:

Ce sont les données .NET façon dont les travaux de liaison: la liaison est non fonctionnel jusqu'à ce que le contrôle de premier devient visible. ... Il n'existe aucune solution de contournement pour rendre le contrôle visible temporairement.

0

Je résolu ce problème en changeant par programme à l'Tab2 puis de revenir au Tab1

 foreach (TabPage tab in tabControl.TabPages) 
     { 
      tab.Visible = true; 
     } 
     tabControl.SelectedIndex = 0; 
+0

C'est une solution, mais pas idéale, en raison de ce que je considère comme une apparence de formulaire pour l'utilisateur. Il a cependant ouvert quelques portes de plus dans ma recherche d'une réponse à ma question. – KDrewiske

Questions connexes