Announcement

Collapse
No announcement yet.

frage zur get und set methode

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • frage zur get und set methode

    hallo zusammen, vll könnt ihr mir ja helfen...

    - ich habe zwei forms: login und hauptprogramm
    - im loginfenster habe ich eine textbox = benutzername
    - und im hauptprogramm ein label

    nun zu meinem problem:

    ich möchte den text aus der textbox im login dem label im hauptprogramm zuweisen

    dazu habe ich die get, set methode verwendet, und habe das ganze erstmal mit einem normalen string versucht, das hat wunderbar funktioniert. ich konnte diesen string aber leinder nicht die textbox zuweisen.


    mein code zu diesen problem:

    login (form 1):

    private string a = "hier soll eigentlich der inhalt der textbox stehen, ich kann aber nur einen string eingeben";
    public string A
    {
    get {return this.a;}
    set {this.a = value;}
    }

    hauptprogramm (form 2):

    login log = new login();
    this.label.Text = log.A; //hier möchte ich den textboxinhalt zuweisen


  • #2
    A in deinem Code nennt man eine Property und die muß nicht zwingend dahinter ein Feld haben sondern kann genauso gut auch direkt die Werte berechnen oder aus einem Control holen.

    Also z.B

    Code:
    public string A
    {
    get {return textBox.Text;}
    set {textBox.Text = value;}
    }
    Du mußt in deinem Code auch die Login form anzeigen sonst hat der User keine Chance da was einzutragen. Da deine Form Login heißt vermute ich mal das du sie modal anzeigen willst. Also z.B.

    Code:
    login log = new login();
    if (log.ShowDialog() == DialogResult.OK) // DialogResult hängt davon ab wie du den Dialog schließt
    {
        this.label.Text = log.A;
    }

    Comment


    • #3
      Hallo,
      danke für die schnelle Antwort, verstehe wie du das meinst, funktioniert nur nicht, denke ich habe da wieder was falsch gemacht, beim Aufruf des Hauptprogrammes ruft er nicht das Hauptprogramm, sondern immer wieder das Login auf.

      Ich poste mal meinen Code mit Kommentar:

      Login (ohne Datenbank, da ich mich damit noch nicht richtig auskenne):

      Code:
      namespace DVD 
      {
      
        public partial class Login : Form
        {
      
          public Login()
          {
             InitializeComponent();
          }
      
          private void buttonAnmelden(object sender, EventArgs e)
          {
             const userName = "test";
             const int pinUser = 1234;
           
             int pin = Convert.ToInt32(maskedTextBox.Text);
      
             if (textBox.Text == userName && maskedTextBox.Text == pinUser)
             {
                 Hauptprogramm hp = new Hauptprogramm();
                 this.Visible = false;
                 hp.ShowDialog();
             } 
          }
      
          public string A                     //Die Methode muss ja außerhalb des Clickevents stehen, daher wird die doch nie angesprochen, oder?
          {
               get { return textBox.Text; }   //hier könnte ich z.B. der TextBox einen Namen zuweisen, der im Hauptproggramm auch dem label1 zugewiesen wird
               set { textBox.Text = value; }       
          }
        } 
      }
      Hauptprogramm (mit einem label = label1)

      Code:
      namespace DVD
      {
        public partial class Hauptprogramm : Form
        {
            public Hauptprogramm()
            {
                 InitializeComponent();
         
                 Login log = new login();
      
                 if (log.ShowDialog() == DialogResult.OK) //wenn ich das mache, wird immer ein neues Login geöffnet, und nicht das Hauptprogramm
                   {
                      this.label1.Text = log.A;
                   }
            }
        }
      }
      Mit einer Datenbank wäre das wohl einfacher, da werde ich mich aber erst später mit beschäfftigen

      Hoffe ihr versteht meinen Code

      Comment


      • #4
        Autsch. Siehst Du dieses Problem denn nicht selbst:
        Code:
        //  im Login-Form:
                   Hauptprogramm hp = new Hauptprogramm();  //  new
                   this.Visible = false;
                   hp.ShowDialog();
        
        //  im Hauptprogramm
                   Login log = new login();  //  new
        
                   if (log.ShowDialog() == DialogResult.OK) // usw.
        Das sieht nach Zirkelschluss aus. Und welches Formular steht in Application.Run()?

        Ich wollte eigentlich nicht mit meiner Lösung kommen, weil Dir wohl noch die Voraussetzungen fehlen; aber vernünftig geht es von Main aus (!) so:
        1. Das LoginForm erzeugen und aufrufen
        2. Je nach Rückgabewert Ende des Programms oder
        3. Aufruf des Hauptprogramms mit Übergabe von Werten
        Das sieht dann etwa so aus:

        [highlight=c#]// in program.cs
        public static void Main()
        {
        bool loginOK = false;
        string username = String.Empty;
        using(LoginForm login = new LoginForm()) {
        loginOK = login.ShowDialog() == DialogResult.OK;
        if (loginOK)
        username = login.Username; // als Eigenschaft nach außen gegeben
        }
        if (loginOK) {
        MainForm main = new MainForm();
        main.Username = username; // als Eigenschaft übergeben
        Application.Run(main);
        }
        }

        // in MainForm.cs
        private string username = String.Empty;
        public string Username {
        set { username = value;
        label1.Text = value; } // kann hier erledigt werden
        }[/highlight]
        Ich hoffe, der Code spricht für sich selbst.

        Übrigens solltest Du sofort (von Anfang an) richtige Bezeichner verwenden; Namen wie Label1 gehören verboten! Anstelle der Convert-Methoden sind (soweit vorhanden) immer Parse, ParseExact, TryParse, TryParseExact vorzuziehen. Und die MaskedTextBox bietet Erleichterungen für spezielle Eingaben.

        Gruß Jürgen

        Comment


        • #5
          Originally posted by Jürgen Thomas View Post
          Anstelle der Convert-Methoden sind (soweit vorhanden) immer Parse, ParseExact, TryParse, TryParseExact vorzuziehen.
          Hallo Jürgen,

          sorry offtopic aber nachdem ich diesen Satz hier schon öfter von Dir gelesen habe, muss ich mal fragen: Wieso ist Intxx.Parse Convert.ToIntxx vorzuziehen?

          ToIntxx macht doch nix anderes als:

          [highlight=c#]public static int ToInt32(string value)
          {
          if (value == null)
          {
          return 0;
          }
          return int.Parse(value, CultureInfo.CurrentCulture);
          }[/highlight]

          Also, wo ist das Problem, wenn ich mich nicht selbst um die Culture kümmern möchte?

          Gruß
          Peter

          Comment


          • #6
            [offtopic]
            Hallo Peter,

            bei "einfachem" int.Parse hast Du fast recht. Wie es in der SDK-Doku/MSDN steht:
            Convert.ToInt32-Methode (String)
            Der Rückgabewert ist das Ergebnis eines Aufrufs der Int32.Parse-Methode für value.
            Gibt es einen Grund, nicht die eigentliche Int32.Parse-Methode aufzurufen, sondern den Umweg über die Convert.ToInt32-Methode zu gehen?

            Wichtiger wird es dann, wenn die Überladungen von Parse, ParseExact mit einem IFormatProvider oder gar mit einem "freien" Format (z.B. ddmmyy für ein Datum) genutzt werden.

            TryParse, TryParseExact haben zusätzlich den Vorteil, dass Exceptions vermieden und stattdessen Vorgabewerte verwendet werden können.

            Ich hoffe, Du akzeptierst meine Erklärung. Jürgen
            [/offtopic]

            Comment


            • #7
              Originally posted by Jürgen Thomas View Post
              Gibt es einen Grund, nicht die eigentliche Int32.Parse-Methode aufzurufen, sondern den Umweg über die Convert.ToInt32-Methode zu gehen?
              Nö, aber es ist auch nichts Böses, wenn es jemand benutzt und Dein Satz, über den ich gestolpert bin, klingt halt so. Wichtig wäre halt, dass man sowohl Convert als auch Parse eine ordentliche Exceptionbehandlung zukommen lässt.

              Originally posted by Jürgen Thomas View Post
              Ich hoffe, Du akzeptierst meine Erklärung. Jürgen
              Klar.

              Gruß
              Peter

              Comment

              Working...
              X