2010-05-14 6 views
1

Il est préférable d'accepter mon erreur avec cette question. J'ai foiré les choses c'est pourquoi j'ai eu ce problème. Désolé pour les gens qui te tracasse ...Quelqu'un peut-il me dire ce qui ne va pas dans cette partie du code

string name = ((DateTimePicker)sender).Name.ToString(); 
     name = name.Substring(0, name.Length - 1); 
     name = name + "4"; 
     TimeSpan duration = new TimeSpan(); 
     duration = ((DateTimePicker)sender).Value - ((DateTimePicker)panel2.Controls[name]).Value; 
     name = name.Substring(0, name.Length - 1); 
     name = name + "6"; 
     ((MaskedTextBox)panel2.Controls[name]).Text = duration.ToString(); 

Lors de l'exécution, il me donne objet référence non mis à l'instance d'un objet fonctionnalité similaire est utilisé sur d'autres endroits, mais je ne peux pas savoir ce que je dois ici ré-initialiser :

$

alt text http://www.freeimagehosting.net/uploads/735eefb5db.jpg

le casting pour DateTimePicker est très bien je dois obtenir un nom pour le datetiempicker pour identifier la ligne, il est dans ma forme et le sélecteur avant que pour calculer leurs différences et ensuite imprimer tha t la différence dans une zone maskedtext du contrôle dont je fais le nom en utilisant les noms de deux datetimepickers mais quand j'accède aux contrôles dans la ligne d'erreur, je reçois ce message.

+2

Vous devez être plus précis, quelle est la ligne qui déclenche l'exception? – James

+0

Que fais-tu avec le nom? C'est impossible pour nous de savoir sans connaître les détails. Attachez simplement le débogueur et passez sur chaque ligne où vous récupérez un contrôle. L'un d'eux est nul. – Nix

+0

Comme Nix dit, passez par-dessus les lignes et vous trouverez l'erreur ... c'est panel2.Controls [nom] ou panel2 lui-même ... hmm ... peut-être que les expéditeurs sont nuls ???? – w4ik

Répondre

4

... Beaucoup

d'en faire un peu plus clair

utilisation String.Format(). C'est correct de ne pas utiliser StringBuilder pour cela, mais il est vraiment difficile de comprendre ce que vous essayez de faire.

En outre, des choses comme le

(DateTimePicker)sender 

ne doivent pas être répétées. Diffusez une fois et réutilisez l'objet Cast.

DateTimePicker _castObject = (DateTimePicker)sender; 

L'erreur obj non ref peut se trouver sur l'un de ces objets. À moins que vous ne passiez à travers, ou ajouter des déclarations défensives (ci-dessous), vous aurez beaucoup de temps à le comprendre.

if (sender == null) 
{ throw new ArgumentNullException("sender", "sender is null");} 

Si cela se produit dans un gestionnaire d'événements standard sur votre formulaire, il ressemblerait à quelque chose comme ça (excusez le VB, je ne peux pas faire C# de la mémoire plus).

Protected Function btnOK_Click(sender as Object, e as EventArgs) Handles btnOK.Click 
'your code' 
End Function 

Si vous voyez quelque chose de similaire, il n'y a aucune raison de lancer un objet sur le formulaire. Il suffit d'y accéder par son nom de contrôle (btnOK, txtMaskedTextBox, etc).

Vous semblez aller à propos de quelque chose ici d'une manière complètement fausse. Peut-être devriez-vous commencer par expliquer le problème que vous essayez de résoudre au lieu de cette exception spécifique. Voir "thin metal ruler".

+0

Pouvez-vous m'aider sur le point que je devrais utiliser pour lancer une fois ... mais vous ne pensez pas que cela ferait un objet séparé pour cela et je ne serai pas en mesure d'accéder à l'objet sur mon formulaire – Mobin

+0

Vous utilisez le expéditeur 3x et la coulée 3x. Cela provoque un travail supplémentaire à faire. Jetez-le une fois et utilisez le résultat casté. Que voulez-vous dire "ne sera pas en mesure d'accéder à l'objet sur mon formulaire"? Peut-être que vous devriez poster plus de la méthode afin que nous puissions voir exactement ce que vous essayez d'accomplir. – StingyJack

+0

Je voulais dire que si un contrôle nommé MaskedTextBox1 se trouve sur votre formulaire et que vous le transtypiez et que vous le sauvegardiez dans un autre objet, vous ne pouvez pas accéder à MaskedTextBox1 à partir de cet objet casté. J'ai essayé ce que vous avez dit mais ensuite je dois recalculer pour arriver à mon contrôle MaskedTextBox1 l'essayer, vous le comprendrez. Ou vous trouvez comment faire référence à cet objet coulé faites le moi savoir – Mobin

0

Vérifiez que vous avez correctement formé le "nom" et qu'il existe un contrôle portant ce nom. Et ce panel2 n'est pas nul.

+0

ya j'ai fait cela ... c'est pourquoi je passe beaucoup de temps à faire ces vérifications avant de poser une question aussi stupide mais c'est ce qui me dérange ... pour confirmer je dirais que si panel2 n'existe pas alors la ligne 7 ne fonctionnera pas dans mon code donné et oui j'ai vérifié le «nom» existe – Mobin