Entwickler-Ecke

C# - Die Sprache - Problem bei der int Konvertierung


RedSkull - Fr 21.12.07 16:40
Titel: Problem bei der int Konvertierung
Hallo zusammen

Wir haben folgendes Problem. Bei der dieser Int-Konvertierung bekommen wir eine Fehlermeldung, wisst ihr an was das liegen könnte?

Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs "System.InvalidCastException" ist in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Unable to cast object of type 'System.Windows.Forms.TextBox' to type 'System.IConvertible'.



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DatenverwaltungSportverein
{
    //Struktur
    public struct struMitglieder
    {
        public int iMitgliedernummer, iPLZ;
        public double dMitgliederbeitrag;
        public string sVorname, sNachname, sStrasse, sOrt, sSportart, sMitgliedsart;
        public DateTime dtGeburtsdatum;
        public bool bBezahlt;
    }
      
    public partial class FrmMain : Form
    {
        //Membervariablen
        List<struMitglieder> m_Mitglieder = new List<struMitglieder>();


        //Fülle Daten in Array
        private void ErstelleObjektInDynamicList()
        {
            struMitglieder MG = new struMitglieder();


            MG.iMitgliedernummer = Convert.ToInt32(txtMainMitgliedsnummer) + 1;
            MG.sVorname = Convert.ToString(txtMainVorname);
            MG.sNachname = Convert.ToString(txtMainName);
            try
            {
                MG.dtGeburtsdatum = Convert.ToDateTime(txtMainGeburtsdatum);
            }
            catch
            {
                MessageBox.Show("Bitte gültiges Datum eingeben.\nz.B. 06.06.1966"); 
            }
            MG.sStrasse = Convert.ToString(txtMainStrasse);
            MG.iPLZ = Convert.ToInt32(txtMainPLZ);
            MG.sOrt = Convert.ToString(txtMainOrt);
            try
            {
                MG.dMitgliederbeitrag = Convert.ToDouble(txtMainMitgliederbeitrag);
            }
            catch

            {
                MessageBox.Show("Bitte Zahl eingeben.");
            }
            MG.bBezahlt = Convert.ToBoolean(cbMainBezahlt);
            MG.sMitgliedsart = Convert.ToString(txtMainMitgliedsart);
            MG.sSportart = Convert.ToString(txtMainSportart);

            m_Mitglieder.Add(MG);  
        }
}


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Robert.Wachtel - Fr 21.12.07 16:44

Willst Du die Textbox oder deren Inhalt konvertieren?


C#-Quelltext
1:
myIntegerVar = Convert.ToInt32(myTextBox.Text);                    


RedSkull - Fr 21.12.07 17:00

Wie wollen den Inhalt konvertieren und ein Autoinkrement um eins erhöhen.


JüTho - Fr 21.12.07 17:04

Naja... Roberts Hinweis ist zwar korrekt, aber für die Praxis nicht gut genug.

@RedSkull
Das ist ein Zeichen für Dich, dass Du immer - IMMER! - auf die richtigen Datentypen achten musst. Für Grundlagen empfehle ich z.B. OpenBook C# [http://www.galileocomputing.de/openbook/csharp/] und OpenBook Visual C# [http://www.galileocomputing.de/openbook/visual_csharp/].

Generell ist die jeweilige TryParse-Methode anstelle der Convert-Klasse zu empfehlen. Wieso bist Du sicher, dass in der TextBox wirklich eine gültige Zahl eingegeben wurde?

C#-Quelltext
1:
2:
3:
int myIntegerVar;
if (! Int32.TryParse(myTextBox.Text, myIntegerVar) )
  myIntegerVar = -1;

Und ein Text, der schon vom Typ String ist, braucht natürlich nicht konvertiert zu werden:

C#-Quelltext
1:
MG.sOrt = txtMainOrt.Text;                    

Außerdem ist selten eine Fehlermeldung so eindeutig und hilfreich wie die von Dir genannte. Jürgen