C# Benutzer abfrage Windows Forms

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von Kyo1987, 02.07.2012.

  1. #1 Kyo1987, 02.07.2012
    Kyo1987

    Kyo1987 Erfahrener Benutzer

    Dabei seit:
    23.04.2008
    Beiträge:
    144
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe folgendes Problem.

    Ich würde gerne mit Sharp Develop eine Benutzer Passwort Abfrage erstellen. Wenn beides richtig ist, soll dann ein neues Forms geöffnet werden.

    Jetzt bin ich gerade soweit, dass ich die Benutzer vergleiche.... .

    Bekomme aber den Fehler das ich nicht zwei Strings vergleichen kann.


    Code:
    void Button1MouseClick(object sender, MouseEventArgs e) //Prüft ob Benutzereingabe richtig sind
            {
                
                String Benu = ("User1" | "User2"); // Symbol | ist ein oder Zeichen da ich die beiden Benutzer prüfen möchte alle andern sind falsch
                         
                if (textBox1.Text == Benu)
                {
                    MessageBox.Show("Ihr Benutzername ist richtig!");
                }
                else 
                {
                    MessageBox.Show("Ihr Benutzername oder Ihr Passwort sind ungültig");
                }
            }
    
    FEHLER:
    Der Operator "|" kann nicht auf Operanden vom Typ "string" und "string" angewendet werden. (CS0019) - \\bart\nutzer\ObladenOl\SharpDevelop Projects\Netzlaufwerk_WINFORM\Netzlaufwerk_WINFORM\MainForm.cs:56,22

    Hoffe Ihr könnt mir bei dem Problem weiterhelfen... .

    Bei Google finde ich leider nichts.

    Vielen Dank vorab.

    LG Kyo
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 02.07.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.889
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Einem String kannst du nur einen Wert zuweisen. ODER funktioniert dabei nicht -> wie soll der String entscheiden, ob er den einen oder den anderen Wert enthalten soll.
    Die ODER-Verknuepfung gehoert in die Abfrage
    Code:
    if (textbox1.text == "User1" | "User2")
     
  4. #3 deen, 02.07.2012
    Zuletzt bearbeitet: 02.07.2012
    deen

    deen Benutzer

    Dabei seit:
    25.10.2009
    Beiträge:
    55
    Zustimmungen:
    0
    Kleine Berichtigung:

    Code:
    if ( (textbox1.text == "User1") || (textbox1.text ==  "User2") )
    Andernfalls würde man ja auf der linken Seite nen bool haben (also: textbox1.text == "User1" ), welches man dann mit dem String ( "User2") auf der rechten Seite verodern würde.

    (War bestimmt nur ein Flüchtigkeitsfehler, aber ich wollte es eben erwähnen, damit sich der Threadstarter nicht wundert, dass es nicht funktioniert).

    Als Alternative könnte man auch einfach alle möglichen Nutzernamen in eine Datenstruktur seiner Wahl packen und dann eben mittels Contains nachfragen, ob der eingegebene Nutzername existiert:

    Code:
    
    // Irgendwo im Constructor
    IList<String> usernames = new List<String>();
    usernames.Add("User1");
    usernames.Add("User2");
    
    void Button1MouseClick(object sender, MouseEventArgs e)
            {
                bool usernameExists = usernames.Contains(textBox1.Text);
                if (usernameExists) {
                    MessageBox.Show("richtig");
                }
                else {
                    MessageBox.Show("ungültig");
                }
            }
    
    
     
  5. #4 xandros, 02.07.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.889
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    so etwa! War aus dem Bauch raus ohne exakte Syntaxkontrolle..... thx fuer Korrektur!
     
  6. #5 Kyo1987, 03.07.2012
    Kyo1987

    Kyo1987 Erfahrener Benutzer

    Dabei seit:
    23.04.2008
    Beiträge:
    144
    Zustimmungen:
    0
    Danke für die Info.

    Habe es wie folgt lösen können:

    Code:
    if ((inputusr == "Username" & inputpw == "User-Passwort") ||                (inputusr == "Username2" & inputpw == "User2-Passwort"))
    
    Jetzt bin ich dran das Programm ein wenig sicherer zu machen, in dem ich die User und Passwörter auslagere in die Registry aber wie genau das funktioniert ist eine Wissenschaft für sich. Denn so kann ich das Passwort nicht ändern... . Habe nämlich eine Windows Form erstellt mit "Passwort ändern" weiß aber nicht wie ich das genau machen soll. Denn die Variable String PW="****" kann ich nicht ersetzen oder doch?

    LG Kyo
     
  7. deen

    deen Benutzer

    Dabei seit:
    25.10.2009
    Beiträge:
    55
    Zustimmungen:
    0
    Hi,

    ich habe mal ein ausführlicheres Beispiel geschrieben.

    Eins aber vorab: Die Passwort-Änderung bleibt natürlich nur solange bestehen wie die Anwendung geöffnet ist. Schließt man sie und öffnet sie erneut werden logischerweise die alten Werte wieder initialisiert, da sie hart codiert sind.

    Um eine dauerhafte Änderung zu ermöglichen, dürfen natürlich die Nutzer bzw. die Nutzernamen und dazugehörigen Passwörter nicht hart im Code stehen.
    Überlicherweise speichert man diese Daten in einer Datenbank (Beispielsweise MySQL, PostGres usw.). Alternativ kann man sie auch in einer XML-, Properties- oder ganz normalen Textdatei speichern. Eine Datenbank wäre allerdings vorzuziehen.


    Nun das Beispiel:


    Im Constructor erzeugt man sich seine User und fügt sie einer Liste hinzu. Normalerweise holt man sich diese Daten wie gesagt aus einer Datenbank.


    Code:
    public MainForm() {
                InitializeComponent();
    
                panels = new List<Panel>() { loginPanel, 
                                             loggedInPanel, 
                                             changePasswordPanel, 
                                             passwordChangedPanel };
                
                ChangeTo(loginPanel);
    
                validUsers = new List<User>();
                // Enter some test data
                validUsers.Add(new User() { Name = "User1", Password = "pw1" });
                validUsers.Add(new User() { Name = "User2", Password = "pw2" });
            }
    Die Methode „loginButton_Click“ wird aufgerufen, sobald man auf „Login“ drückt.

    login1.PNG
    Code:
    private void loginButton_Click(object sender, EventArgs e) {
                // check if the username with the given password exists.
                currentUser = validUsers.FirstOrDefault(u => u.Name == usernameTextbox.Text &&
                                                           u.Password == passwordTextbox.Text);
    
                // User exists
                if (currentUser != null) {
                    // Set the username
                    usernameLabel.Text = currentUser.Name;
                    // Remove password for the next login
                    passwordTextbox.Text = string.Empty;
                    // Switch the panel
                    ChangeTo(loggedInPanel);
                } else {
                    // Given user/password pair isn't valid
                    MessageBox.Show("No valid login!");
                }
            }
    Nun wird in der Liste durch die Methode [FONT=Times New Roman, serif]FirstOrDefault“ geschaut, ob der Nutzer existiert. Wenn ja, dann wird dieser in der Variable „currentUser“ vermerkt, da man später ja noch die Möglichkeit haben will auf die Daten von ihm zuzugreifen. [/FONT]

    [FONT=Times New Roman, serif]Ein neues Panel wird gewechselt, welches den Namen des momentan eingeloggten Nutzer anzeigt.[/FONT]

    login2.PNG

    [FONT=Times New Roman, serif]Drückt man hier auf „Change Password“ wird die Methode „changePasswordButton_Click“, welche wieder das Panel gewechselt.[/FONT]


    Code:
    private void changePasswordButton_Click(object sender, EventArgs e) {
                // Show the panel which enables to change the password.
                ChangeTo(changePasswordPanel);
            }
    login3.PNG


    Code:
    private void updatePasswordButton_Click(object sender, EventArgs e) {
                // Update the password
                currentUser.Password = changePasswordtextbox.Text;
                changePasswordtextbox.Text = string.Empty;
                // Inform the user update the password change
                ChangeTo(passwordChangedPanel);
            }
    [FONT=Times New Roman, serif]In diesem neuen Panel kann man das neue Passwort für die zur Zeit eingeloggten Nutzer eingeben. Bei Knopfdruck auf „Ok“, wird die Methode „updatePasswordButton_Click“ aufgerufen, die das Passwort des aktuellen Nutzers ändert (currentUser.Password = changePasswordtextbox.Text). [/FONT][FONT=Times New Roman, serif]
    [/FONT]

    [FONT=Times New Roman, serif]Hier würde man üblickerweise nun einen SQL-Query ausführen, wenn man die Daten in einer Datenbank hätte und ändern möchte.[/FONT][FONT=Times New Roman, serif]
    [/FONT]

    [FONT=Times New Roman, serif]Das Panel wird erneut gewechselt, um den Anwender zu informieren, dass das Passwort geändert wurde. Hier kann man nun mittels „Back to login“ das Start-Panel, also den Login-Dialog wieder aufrufen.[/FONT]

    login4.PNG

    [FONT=Times New Roman, serif]Versucht man sich nun mit dem alten Passwort einzuloggen geht das schief, da es natürlich geändert wurde.[/FONT]

    Komplettes Codebeispiel:

    Klasse "User":

    Code:
    class User
        {
            private String name;
            private String password;
    
            public System.String Name
            {
                get { return name; }
                set { name = value; }
            }
    
            public String Password
            {
                get { return password; }
                set { password = value; }
            }
        }
    Klasse "MainForm":
    Code:
    public partial class MainForm : Form
        {
            /** All available user accounts. */
            private IList<User> validUsers;
            /** Logged in user */
            private User currentUser;
            /** All panels of the application */
            private IList<Panel> panels;
    
            public MainForm() {
                InitializeComponent();
    
                panels = new List<Panel>() { loginPanel, 
                                             loggedInPanel, 
                                             changePasswordPanel, 
                                             passwordChangedPanel };
                
                ChangeTo(loginPanel);
    
                validUsers = new List<User>();
                // Enter  some test data
                validUsers.Add(new User() { Name = "User1", Password = "pw1" });
                validUsers.Add(new User() { Name = "User2", Password = "pw2" });
            }
    
            private void loginButton_Click(object sender, EventArgs e) {
                // check if the username with the given password exists.
                currentUser = validUsers.FirstOrDefault(u => u.Name == usernameTextbox.Text &&
                                                           u.Password == passwordTextbox.Text);
    
                // User exists
                if (currentUser != null) {
                    // Set the username
                    usernameLabel.Text = currentUser.Name;
                    // Remove password for the next login
                    passwordTextbox.Text = string.Empty;
                    // Switch the panel
                    ChangeTo(loggedInPanel);
                } else {
                    // Given user/password pair isn't valid
                    MessageBox.Show("No valid login!");
                }
            }
    
            private void changePasswordButton_Click(object sender, EventArgs e) {
                // Show the panel which enables to change the password.
                ChangeTo(changePasswordPanel);
            }
    
            private void updatePasswordButton_Click(object sender, EventArgs e) {
                // Update the password
                currentUser.Password = changePasswordtextbox.Text;
                changePasswordtextbox.Text = string.Empty;
                // Inform the user update the password change
                ChangeTo(passwordChangedPanel);
            }
    
            private void backToLogin_Click(object sender, EventArgs e) {
                // Show the login screen, because the user needs to log in again
                ChangeTo(loginPanel);
            }
    
            private void ChangeTo(Panel panel) {
                foreach (Panel p in panels) {
                    if (p.Equals(panel)) {
                        p.Visible = true;
                        p.BringToFront();
                        p.Invalidate();
                    } else {
                        // disable panel
                        p.Visible = false;
                    }
                }
            }
        }
    [FONT=Times New Roman, serif]
    [/FONT]
     
  8. #7 Kyo1987, 04.07.2012
    Kyo1987

    Kyo1987 Erfahrener Benutzer

    Dabei seit:
    23.04.2008
    Beiträge:
    144
    Zustimmungen:
    0
    Hallo deen,

    vielen Dank für deine ausführliche Beschreibung.

    Ich werde mich gleich mal ans Werk begeben und das ausprobieren was du mir geschrieben hast.

    Wie kann ich denn Daten in eine SQL Datenbank auslagern.

    Ich habe Zuhause ein NAS, welches SQL kann. Ist es möglich über das Netzwerk die Daten des Passwortes in den Server auszulagern?

    Ich werde mich mal über google ein wenig schlau machen.

    Erst einmal vielen Dank.

    LG Kyo
     
  9. #8 xandros, 04.07.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.889
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Welchen Dialekt? SQL ist nicht gleich SQL.....Aus C# heraus benoetigt man fuer den Zugriff z.B. auf MS-SQL-Server andere Connectoren als beim Zugriff auf MySQL und auch die Abfragen werden von der Syntax ein wenig unterschiedlich aussehen.

    Hast du die Moeglichkeit von einem Rechner aus direkt auf diesen SQL-Server zuzugreifen und die vorhandenen Datenbanken bzw. auch die darin enthaltenen Tabellen und Abfragen zu sehen?

    Die einfachste Moeglichkeit waere auf dem lokalen Rechner z.B. MS-SQL-Server 2008 zu installieren und darauf via ODBC zuzugreifen.
     
  10. AdMan

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  11. #9 Kyo1987, 04.07.2012
    Kyo1987

    Kyo1987 Erfahrener Benutzer

    Dabei seit:
    23.04.2008
    Beiträge:
    144
    Zustimmungen:
    0
    Daheim besitze ich ein Qnap-TS412 welches über mysql verfügt.

    Das mit den Connectoren habe ich auch schon gelesen:

    Verbindung zum MySQL-Server mit C#


    Deine Methode ist echt klasse.

    Ich werde die mit dem MySql aber auch mal ausprobieren.

    Vielen Dank für deine Hilfe.

    Ich hatte es heute auch schon probiert in die Registry zu speichern.

    Leider hat es nicht so ganz geklappt, da ich nicht weiß wie ich die IF Abfrage von der Form Main in die Buttons leite... .


    Code:
    /*
     * Erstellt mit SharpDevelop.
     * Benutzer: ------
     * Datum: -------
     * Zeit: -----
     * 
     * Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
     */
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO;
    using Microsoft.Win32;
    using System.Security.Permissions;
    
    
    
    namespace Netzlaufwerk_WINFORM
    {
        /// <summary>
        /// Description of MainForm.
        /// </summary>
        
        public partial class MainForm : Form
        {
            
            
            public MainForm()
            {
                //
                // The InitializeComponent() call is required for Windows Forms designer support.
                //
                InitializeComponent();
                CenterToScreen();
                          
              
                }
            
                public void PruefungProgramm()
                {
                    RegistryKey RK = Registry.CurrentUser.OpenSubKey(@"Names\"); //In der Registry prüfen ob SubKey vorhanden
                    if(RK != null) //Ist der Subkey ungleich Null sprich vorhanden führe das Programm aus.
                    {
                        
                    }
                    
                    else
                    {
                        // Nicht vorhanden
                        MessageBox.Show("Programm wird das erste Mal ausgeführt bitte PW definieren");
                        
                        if ((textBox1.Text == "user2") | (textBox1.Text == "user1") )
                        {
                            string    pw = textBox2.Text;                                //Spreichert die Eingabe von textBox2 in die Variable pw ab und übergibt diese an die Registry
                            RegistryKey p;
                            p = Registry.CurrentUser.CreateSubKey("Names");
                            p.SetValue("PW", pw);
                            
                        }
                        
                    }
                }
                
            
    
            
            // Einfuegen falls nicht funktional
            void Button1MouseClick(object sender, MouseEventArgs e)
                        {
                            
                            string inputusr = this.textBox1.Text;
                            string inputpw = this.textBox2.Text;
                            
                            if ((inputusr == "user1" & inputpw == "123") ||             //Benutzer 1 oder 2 werden auf Korektheit geprüft.
                                (inputusr == "user2" & inputpw == "124"))
                                
                            {
                                MessageBox.Show("!!!!!!LOGIN ERFOLGREICH!!!!!!");                    //Wenn das Passwort richtig ist öffnet sich das nächste Fenster
                                
                                
                                if (inputusr == "user1" & inputpw == "123")
                                {
                                    new Form1().Show();                                 //öffnet das nächste Fenster
                                    this.Hide();                                         //schließt das alte Fenster
                                }
                                
                                if (inputusr == "user2" & inputpw =="124")
                                {
                                    new Form3().Show();
                                    this.Hide();
                                }
                                
                                
                            }
                            
                            else                                                            //Ansonsten wird das Fenster geschlossen
                            {
                                MessageBox.Show("Passwort ist falsch!!\nProbieren Sie es bitte erneut!");
                                
                            }
                            
                        }
                        
                        void TextBox2KeyDown(object sender, KeyEventArgs e)
                        {
                            if (e.KeyCode == Keys.Return) //erkennt Key down Enter Event
                            {
                                string inputusr = this.textBox1.Text;
                                string inputpw = this.textBox2.Text;
                                
                                if ((inputusr == "user1" & inputpw == "123") ||             //Benutzer 1 oder 2 werden auf Korektheit geprüft.
                                    (inputusr == "user2" & inputpw == "124"))
                                    
                                {
                                    MessageBox.Show("!!!!!!LOGIN ERFOLGREICH!!!!!!");                    //Wenn das Passwort richtig ist öffnet sich das nächste Fenster
                                    
                                    
                                    if (inputusr == "user1" & inputpw == "123")
                                    {
                                        new Form1().Show();                                 //öffnet das nächste Fenster
                                        this.Hide();                                         //schließt das alte Fenster
                                    }
                                    if (inputusr == "user2" & inputpw =="124")
                                    {
                                        new Form3().Show();
                                        this.Hide();
                                    }
                                    
                                }
                                
                                else                                                            //Ansonsten wird das Fenster geschlossen
                                {
                                    MessageBox.Show("Passwort ist falsch!!\nProbieren Sie es bitte erneut!");
                                
                                }
                            }
                            
                        }
            
                        void Button2MouseClick(object sender, MouseEventArgs e)         //Schließt das Fenster
                        {
                            Close();
                        }
                        
                        
                                            
                        
                        public void Button3Click(object sender, EventArgs e)
                        {
                            string inputusr = this.textBox1.Text;
                            string inputpw = this.textBox2.Text;
                            
                            if (textBox1.Text == ("") )
                            {
                                MessageBox.Show("Bitte tragen Sie Ihren Usernamen ein");
                            }
                            else
                            {
                                if ((inputusr == "user1" & inputpw == "123") || (inputusr == "user2" & inputpw == "124"))
                                {
                                    new PasswortAendern().Show();
                                    
                                    
                                }
                                else
                                {
                                    MessageBox.Show("Sie sind nicht berechtigt das Passwort zu ändern");
                                }
                            }
                        }
                        
                    
        }
    }
    
    
     
  12. #10 xandros, 04.07.2012
    Zuletzt bearbeitet: 04.07.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.889
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Anstelle von dem oben erwaehnten MS-SQL geht natuerlich auch MySQL als lokale Installation....
    Wenn du schon mit Registry anfaengst..... Warum verwendest du dann nicht die Funktionen von WMI oder dem .NET-Framework und greifst direkt auf die Windows-Anmeldedaten zurueck? Der angemeldete Benutzer muss natuerlich ein Windows-Konto mit eigenem Passwort verfuegen..... Das erspart dir Zugriffe auf die Registry, in der ein eingeschraenkter User gar keine Schreibrechte hat und nur ueber Impersonate (System.Security.Principal) erhalten kann!

    (hier ein Beispiel, wie ein Windows-Identity-Wechsel aussehen kann, damit ein User mit niedriger Berechtigung fuer eine gezielte Aufgabe erhoehte Rechte erhaelt: http://msdn.microsoft.com/de-de/library/w070t6ka.aspx )
     
Thema: C# Benutzer abfrage Windows Forms
Besucher kamen mit folgenden Suchen
  1. c# passwortabfrage

    ,
  2. c# passwort abfrage

    ,
  3. c# benutzerverwaltung

    ,
  4. c# passwortabfrage messagebox,
  5. passwortabfrage c#,
  6. c# passwort abfragen,
  7. C# Benutzer und Passwort abfrage,
  8. c# passwort ändern,
  9. c# benutzerabfrage,
  10. c# benutzer passwort,
  11. c# passwort eingabe,
  12. benutzer abfrage c#,
  13. c# fenster benutzer passwort eingabe,
  14. passwort abfrage c#,
  15. c# windows forms user permissions,
  16. inhalt von tabelle in variablen packen c# windows forms,
  17. c# breite von windwos form abfragen ,
  18. users abfragen c#,
  19. c# benutzer passwort ändern,
  20. windows forms c# passwort vergleichen,
  21. csharp user abfrage,
  22. c# abfrage messagebox,
  23. sichere passwortabfrage c#,
  24. c# logon nas,
  25. c# passwortabfrage messagebox dialog
Die Seite wird geladen...

C# Benutzer abfrage Windows Forms - Ähnliche Themen

  1. Windows 7 verschiebt keine Dateien mit chinesischen Schriftzeichen zwischen Laufwerken

    Windows 7 verschiebt keine Dateien mit chinesischen Schriftzeichen zwischen Laufwerken: Hallo, ich habe ein paar Dateien, die im Titel chinesische Schriftzeichen haben, und ich wollte sie auf einen NAS-Ordner schieben. Ich bekomme...
  2. Windows professional von 32 bit auf 64 umstellen

    Windows professional von 32 bit auf 64 umstellen: Hallo leute, habe ein kleines problem. ich möchte mein windows auf 64 bit upgraden und treffe hier auf einigen problemen auf. 1. ich habe mit...
  3. Windows 10 - WLAN

    Windows 10 - WLAN: Hallo liebe Forengemeinde, bin auf ein Problem gestoßen und zwar wie kann ich denn unter Windows 10 ein bereits eingerichtetes WLan Profil...
  4. Windows bootet nicht mehr

    Windows bootet nicht mehr: Hallo zusammen, Mein Laptop bootet seit gestern ganz plötzlich nicht mehr. Hatte ihn vorgestern ganz normal runtergefahren seit gestern morgen...
  5. Rollercoaster Tycoon 2 und Windows 10.

    Rollercoaster Tycoon 2 und Windows 10.: Guten abend, ich habe schon alles hier durchwühlt nur leider ist mein Problem ein anderes als in den anderen Themen aufgeführt. Ich habe heute...