Drole d'erreur d'execution

Résolu
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

J'ai deux maskedtextbox qui sont parametré pour recevoir que 2 int32 ( 99 )
Je dois faire un programme qui parcourt chaque ligne d'un dictionnaire et qui doit regarder si la longueur de la ligne est au minimum la valeur du premier mask et au maximum celle du deuxieme
Seulement quand je compile j'ai une erreur d'execution :

<hr />
L'exception System.NullReferenceException n'a pas été gérée
  Message="La référence d'objet n'est pas définie à une instance d'un objet."
  Source="Bf"
  StackTrace:
       à bf.Form1.button3_Click(Object sender, EventArgs e) dans C:\Documents and Settings\thom\Mes documents\Visual Studio 2005\Projects\Bf\Bf\Form1.cs:ligne 177
       à System.Windows.Forms.Control.OnClick(EventArgs e)
       à System.Windows.Forms.Button.OnClick(EventArgs e)
       à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       à System.Windows.Forms.Control.WndProc(Message& m)
       à System.Windows.Forms.ButtonBase.WndProc(Message& m)
       à System.Windows.Forms.Button.WndProc(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       à System.Windows.Forms.Application.Run(Form mainForm)
       à BruteForceMsn.Program.Main() dans C:\Documents and Settings\thom\Mes documents\Visual Studio 2005\Projects\Bf/Bf\Program.cs:ligne 17
       à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       à System.Threading.ThreadHelper.ThreadStart()
<hr />

Voici mon code :

<hr />

line = sr.ReadLine();

if (line.Length <
Convert.ToInt32(maskedTextBox1.Text) || line.Length >
Convert.ToInt32(maskedTextBox2.Text)){

motok++;

}

<hr />

Merci pour votre aide

7 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
Ce n'est pas line.Lenght qui est null, mais line comme te l'explique fregolo. Ceci certainement dût au fait que tu es à la fin de ton fichier et que tu continues de lire => il retourne null.
De plus, on utilise plutôt un numericUpDown qu'une maskedTextBox si c'est juste pour limiter la saisie à des entiers.

<hr size="2" />VC# forever
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Qui est null ? line ?

Le code que tu présentes doit être encapculé par une bouble (for ou while),  a mon avis c'est là qu'il y a un pb, tu doit lire une ligne de trop.
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Non c'est pas ligne, la petit fleche de la boite d'exeption me montre la condition if.
Ca peut pas être la ligne car sans la condition tout marche du feu de dieu
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Oui tu as un objet null dans ta condition, mais en mode debug tu dois pouvoir voir quel objet est null : line, maskedTextBox1 ou
maskedTextBox1)
Sinon je te conseille d'encapsule
r ton if dans un autre if :

line = sr.ReadLine();

if (line != null)
{

  if (line.Length <
Convert.ToInt32(maskedTextBox1.Text) || line.Length >
Convert.ToInt32(maskedTextBox2.Text))  {

    motok++;

  }

  }
}

Je ne pense pas que la convertion plante, sinon ça le dirait dans l'exception (je pense).
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Le debugeur me montre maskedTextBox2.Text

mais pourtant il me dit que cette instruction contient "10" ce qui est tout à fait normal
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
tu as raison line.length est null comment ça se fait ?
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Merci probleme resolu