C# Wenn Taste gedrückt wird, dann bild erscheinen

Injector

Lt. Junior Grade
Registriert
Mai 2016
Beiträge
297
Name und Passwort abfrage bei Porgramm Start

Hallo, ich wollte fragen ob ihr mir helfen könntet.
Wenn ich meinen Programm starte soll erst ein eine andere Form erscheinen der mich nach dem Name und Passwort abfragt und wenn es richtig ist soll dann die Haupt Form erscheinen und wenn falsch dann eine Meldung.

Mfg.
 
Zuletzt bearbeitet:
Such mal nach Splashscreens. Im Grunde schaltest du Name u. Passwort am besten als Splashscreen vor, und je nachdem, ob der alles richtig ist, startest du die Mainform. Wenn es falsch ist, kannst du die Fehlermeldung einfach über eine MessageBox anzeigen, dass sind vorgebaute Benachrichtigungsfenster die C# an Bord hat, damit man nicht für jede kleine Meldung eine eigene Form bauen muss.
 
Erstmal vielen dank hab hin bekommen. Die Sache ist jetzt, wen ich das Programm starte kommt mein Haupt Form und die Abfrage Form. Möchte aber das er erst mein Hauptform abruft wen der eingegebene Name und Passwort richtig sind.
 
Einfach 2. Form aufrufen. Z.B.

Form2 uForm2 = new Form2();
uForm2.DataTransfer += frm_DataTransfer;
uForm2.ShowDialog();
 
TorenAltair schrieb:
Einfach 2. Form aufrufen. Z.B.

Form2 uForm2 = new Form2();
uForm2.DataTransfer += frm_DataTransfer;
uForm2.ShowDialog();
die form kann ich abrufen aber es werden beide gleizeitg geöffnet
 
Am besten mal den Code Posten. Irgendwo ist Code, der die erste Form öffnet, den entfernen bzw. in Fall Erfolg der Passwort Abfrage einfügen.
 
Injector schrieb:
die form kann ich abrufen aber es werden beide gleizeitg geöffnet

Wie gesagt, im Grunde ist deine Anwendung ein Paradebeispiel für Splashscreens. Einfach danach googlen und entsprechend vorgehen.
 
Über
Code:
initializeComponent()
hab ich das hier stehen
Code:
Thread t = new Thread(new ThreadStart(startAbfrage));
            t.Start();
            Thread.Sleep(5000000);
und dann halt eine Methode
Code:
public void startAbfrage()
        {
            Application.Run(new dieAbfrage());
        }
den sleep Vorgang kann ich ja verlängern und da "5000000" hinschreiben damit er so lang warte und nicht direkt meine Hauptform öffnet. Muss dann nur noch irgendwie die Login Daten im Programm schreiben, so das er es erkennt und mich weiter lässt

EDIT: Ok hab es geschafft.
Code:
private void button1_Click(object sender, EventArgs e)
        {
            String username = "root";
            String password = "00000000";
            if ((textBox1.Text == username) && (textBox2.Text == password))
                MessageBox.Show("Erfolgreich eingeloggt");
            else
                MessageBox.Show("Name oder Passwort ist falsch");
        }
Aber nachdem die Nachricht kommt das ich mich erfolgreich eingeloggt habe bleibt das fenster immer noch da und wechselt nicht zur meinem Hauptform
 
Zuletzt bearbeitet:
Das initializeComponent() gehört zu welcher Form? Passwortabfrage?

Das ist auch kein Problem, was Du mit Threading lösen solltest. Lass den Einstiegspunkt Deines Programms (public static void Main(string[] args)) Deine Passwortabfrage öffnen. Im Erfolgfall gib nicht die Meldung aus sondern öffne das HauptForm Deiner Anwendung und schließe das Passwort Form.

Code:
private void button1_Click(object sender, EventArgs e)
        {
            String username = "root";
            String password = "00000000";
            if ((textBox1.Text == username) && (textBox2.Text == password))
                MessageBox.Show("Erfolgreich eingeloggt");
            else
                MessageBox.Show("Name oder Passwort ist falsch");
        }

Steht da irgendwo schließe das Fenster und wechsel zur Hauptform? Oder steht da nur die Anzeige einer MessageBox?

Mal abgesehen davon, dass man durch dekompilieren Deinen Usernamen und Passwort ziemlich einfach rausfinden kann.
 
Es geht viel einfacher als Du denkst:

In deinem Passwort-Form im Event für dein OK-Button validierst du das Passwort.
Ist das Passwort korrekt, setzt du das DialogResult auf DialogResult.OK.
Wenn nicht korrekt dann DialogResult.Cancel;

Beim Cancel-Button ist es noch einfacher, da gehst in die Properties und setzt DialogResult auf Cancel.

In Program.cs im Einstiegspunkt (Main) erzeugst du dein Passwort Formular bevor du Application.Run() aufrufst:

Code:
PasswordForm passForm = new PassformShow();
DialogResult passwordResult = passForm.ShowDialog();
if (passwordResult == DialogResult.OK) {
  Application.Run(new MainForm());
}

Damit wird dein Mainform nur erzeugt und angezeigt wenn du das richtige Passwort eingegeben hast.
Messagebox kannst du dann auch einbauen, wenn du willst.

Allerdings wie Drexel schon erwähnt hat, ist es ein leichtes das Passwort auszulesen.
Hashes sind ein wenig sicherer, selbst wenn der Hashschlüssel zum vergleichen direkt im Code steht, z.b. MD5 oder SHA3. Ohne richtiges PW kommt man dann nicht weiter und da bringt dann auch kein Dissassembler was.
 
Zuletzt bearbeitet:
Finalspace schrieb:
Allerdings wie Drexel schon erwähnt hat, ist es ein leichtes das Passwort auszulesen.
Hashes sind ein wenig sicherer, selbst wenn der Hashschlüssel zum vergleichen direkt im Code steht, z.b. MD5 oder SHA3. Ohne richtiges PW kommt man dann nicht weiter und da bringt dann auch kein Dissassembler was.
Wobei die Sicherheit auch bei Hashes nicht besonders gut ist; den kann man schließlich relativ einfach in der Binary durch einen bekannten austauschen. MD5 sollte btw. nicht mehr verwendet werden.
 
Wenn man schon an der Binary hantiert geht es noch einfacher: die Abfrage immer true zurückgeben lassen.
 
Drexel schrieb:
Das initializeComponent() gehört zu welcher Form? Passwortabfrage?

Das ist auch kein Problem, was Du mit Threading lösen solltest. Lass den Einstiegspunkt Deines Programms (public static void Main(string[] args)) Deine Passwortabfrage öffnen. Im Erfolgfall gib nicht die Meldung aus sondern öffne das HauptForm Deiner Anwendung und schließe das Passwort Form.

Code:
private void button1_Click(object sender, EventArgs e)
        {
            String username = "root";
            String password = "00000000";
            if ((textBox1.Text == username) && (textBox2.Text == password))
                MessageBox.Show("Erfolgreich eingeloggt");
            else
                MessageBox.Show("Name oder Passwort ist falsch");
        }

Steht da irgendwo schließe das Fenster und wechsel zur Hauptform? Oder steht da nur die Anzeige einer MessageBox?

Mal abgesehen davon, dass man durch dekompilieren Deinen Usernamen und Passwort ziemlich einfach rausfinden kann.

Das InitializeComponent() gehört zur meiner Hauptform und da steht nur eine Anzeige von der Messagebox wo ich es mit ok bestätigen kann.
Ergänzung ()

Ich kriege es irgendwie nicht hin, dass er danach mein Hauptform öffnet
Code:
private void button1_Click(object sender, EventArgs e)
        {
            String username = "root";
            String password = "00000000";
            if (textBox1.Text == username && textBox2.Text == password)
            {
                Form1 zeigdich = new Form1();
                zeigdich.Show();
            }  
            else
            {
                MessageBox.Show("Name oder Passwort ist falsch");
            }
        }
Ergänzung ()

Niemand eine Lösung?
Ergänzung ()

Habs gelöst, kann geschlossen werden und danke an euch
 
Das Problem war, das ich mein zweites Form über ein separates Thread geöffnet habe
Code:
    Thread t = new Thread(new ThreadStart(startAbfrage));
                t.Start();
                Thread.Sleep(5000000);
und dann mit dieser Methode gesagt habe öffne erst mein Login Form
Code:
    public void startAbfrage()
            {
                Application.Run(new dieAbfrage());
            }
aber das hat nur zur Probleme geführt, also hab ich im Programm.cs gesagt er soll erst mein Login Form öffnen
Code:
Application.Run(new dieAbfrage());
und dass macht er auch. Dann in der Klasse "dieAbfrage"
Code:
private void button1_Click(object sender, EventArgs e)
        {           
            if (textBox1.Text == "root" && textBox2.Text == "12345678")
            {
                Form1 zeigdich = new Form1();
                zeigdich.Show();
                this.Hide();              
            }
            else
            {
                MessageBox.Show("Name oder Passwort ist falsch");
            }
        }
 
Das liegt wahrscheinlich an dem sinnlosen Thread, der über ein Stunde nur wartet. Enfweder entfernen oder als Hintergrundthread deklarieren.
 
Darlis schrieb:
Das liegt wahrscheinlich an dem sinnlosen Thread, der über ein Stunde nur wartet. Enfweder entfernen oder als Hintergrundthread deklarieren.
Guck mal was ich oben geschrieben habe ich nutze es nicht
 
Ah, hatte ich übersehen. Du rufst in deinem Passwort-Form nach Buttonclick this.Hide() auf. Versuch es mal mit Close().
 
Zurück
Oben