Hallo Leute! Habe folgendes Problem: Ich möchte aus der Startform (Form1) die Form2 aufrufen und danach Form1 schliessen (nicht HIDEN, da jedesmal danach sich das programm nicht ordentlich beendet da die form1 noch unsichtbar aktiv ist)
Mein code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BSS2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text == "admin") {
if (textBox2.Text == "refo3")
{
Form1 frm1 = new Form1();
Form2 frm2 = new Form2();
frm2.Show();
frm1.Close();
}
}
else
{
MessageBox.Show("Login fehlgeschlagen");
}
}
}
}
hallo Sebastian K.,
und was funktioniert jetzt nicht ??
was mir zuerst auffällt (und vermutlich auch dein fehler ist) ist in
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text == "admin") {
if (textBox2.Text == "refo3")
{
Form1 frm1 = new Form1();
Form2 frm2 = new Form2();
frm2.Show();
frm1.Close();
}
}
else
{
MessageBox.Show("Login fehlgeschlagen");
}
}
die variable frm1 lokal ist !!
nils
Wie kann ich sie dann Global definieren?
Sorry bin noch recht neu in der "C# Szene"
P.S Es funktioniert das nicht: Wenn ich das Close vor den Show befehl stelle closed auf einmal die ganze Appl. und wenn ich close nach show stelle bleibt form1 einfach offen 🙁
Lg,
Sebastian
Weisst du überhaupt was dieses tut:
Form1 frm1 = new Form1();
frm1.Close();
Damit intitialisierst du eine neue Instanz von Form1, so das du in diesem Moment 3 Formen hast: 1 Mal die Form2, und 2 Mal die Form1, die zweite Form1 siehst du bloß nicht und dein Close() wird eben auf die neue Form1 ausgeführt.
So sollte es gehen
Form2 frm2 = new Form2();
frm2.Show();
this.Close()
Nein leider geht der Code nicht. Beide Fenster gehen für ungefähr 30 Millisekunden auf und dann beendet sich das Programm ?!
Oh je, mein Fehler, natürlich geht das nicht. Dadurch, daß die 1. Form geclosed wird, beendet sich auch das Programm.
Ich nehme an du versuchst sowas wie ein LogIn-Dialog zu bauen. Ist leider nicht so einfach.
In disem
Kapitel steht allerdings alles was du brauchst.
Stichwörter: Program.cs, Anwendungen mit mehreren Fenstern, DialogResult.
Willst du damit sagen das es in C# keine einfachen Funktionen wie
Form2.Show();
Form1.Unload();
gibt??? 8o
Wie machen das dann Programmierer in C# die mehrere Fenster brauchen? 🤔
Hallo Sebastian K.,
doch, natürlich kann man Fenster beliebig öffnen und schließen. Es geht aber nicht über den Klassennamen, sondern du musst dir die Form-Objekte in Variablen merken. Das wurde oben schon gezeigt.
herbivore
Ja, das ist mir schon klar...nur so leicht wie das oben gezeigt wurde ist das nich...
Ich kann nicht einfach aus Form1 die Form2 aufrufen und die Form1 danach schliessen mit Close... da muss es doch eine Möglichkeit geben verzweifelt
Hallo Sebastian K.,
Form1 ruft Form2 auf und schließt sich danach selbst, so einfach geht das.
Wenn sich dadurch die Anwendung beendet, war Form1 das Hauptform. Dann musst du dafür sorgen, dass die Anwendung kein Hauptform hat. Siehe dazu Form- und Codehandling
herbivore
Danke damit ist mir schon mal sehr geholfen.
Und wie jetzt? Deinen Code einfach in die Program.cs rein?
Sorry falls ich nerv
Nur eine Frage:
Ist es sinnvoller, wenn Form2 (also das Hauptfenster) am Anfang unsichtbar ist, zuerst Form1 öffnet und erst dann sichtbar wird?
Oder ist das schlechter Programmierstil?
Hallo Sebastian K.,
die Umsetzung ist deine Aufgabe. Ich kenne mich zuwenig mit VS aus, um zu sagen, ob man die Programm.cs ungestraft manuell ändern kann. Aber versuchen kannst du es ja mal. Aber das wichtige ist ja das Konzept, das durch meinen Code vermittelt wird, und das kannst du natürlich übernehmen.
herbivore
Herzlichen Dank!
LOL, ich bins nochmal... ich habe nun deinen Code eingebunden und er funktioniert perfekt. Problem: Es öffnet sich immer bevor der Form aufgerufen wird eine Dosbox... der Focus bleibt jedoch auf der DosBox also erscheint das Fenster hinter der Dosbox. Kann man das irgendwie deaktivieren das die DosBox da erscheint?
Hallo Sebastian K.,
du musst das Programm als WindowsForms-Anwendung übersetzen, sonst wird automatisch eine Konsole geöffnet.
Hallo winSharp93,
wenn man die Fenster beliebig schließen können will, dann darf es eben kein Hauptfenster geben. Davon abgesehen kann man ein Hauptfenster nicht von Anfang an verstecken, weil es automatisch angezeigt wird. Man kann es nur kurz danach verstecken, wo durch es aber kurz aufblitzt und das ist sicher kein schöner Programmierstil.
herbivore
Okay das Problem mit der Dosbox habe ich gelöst... nur aus dem Code werde ich nicht ganz schlau!
In VS habe ich eine Form1.cs und eine Program.cs
In der Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
Nun wie kann ich jetzt mit diesem Code die Form aufrufen (den Sie mir gegeben haben)
Hallo Sebastian K.,
tja, es ist immer das gleiche: Wenn schreibt man eine Erklärung wollen die Leute Code, schreibt man Code wollen die Leute eine Erklärung. 🙂 Ich denke jedoch, dass der Code kurz genug ist, um ihn mit ein bisschen Mühe auch ohne Erklärung verstehen zu können.
herbivore
bisschen von beidem ist auch gut 😁 😁
Naja ich werde mein Glück versuchen... mit
Form1 ada = new Form1();
Form1.Show();
Application.Run();
gehts nicht 🙁
Hallo Sebastian K.,
was geht damit nicht?
herbivore
Bekomme wieder mal für 30ms ne Form dann tot 😁
Hallo Sebastian K.,
dann hast du aber bestimmt irgendwo Code, der Form1 schließt, oder?
herbivore
Genau da liegt das Problem. Ich habe nirgendswo Code der das Programm beendet! Ich kann mir nicht erklären warum sich das Programm nach dem Formaufruf beendet...
Ich meine in VB hätte ich das einfach so gemacht
Form1.hide
Form2.Show
Unload Form1
leider geht das ja hier nicht 🙁
Hallo Sebastian K.,
ich bin sicher, dass wenn du ein neues Projekt machst, ein leeres Form1 nimmst und ins Main nur die Zeilen
Form1 ada = new Form1();
ada.Show();
Application.Run();
schreibst, dass dann das Form auch angezeigt wird und die Anwendung weiterläuft (sogar nach schließen des Forms).
Was das starten des zweiten Forms angeht, geht das mit
Form2 ada2 = new Form2();
ada2.Show();
this.Close ();
z.B. als Reaktion auf einen Button.Click; also ganz einfach.
herbivore
8o 8o 8o
Wow so einfach war das?!!! Danke 1000x danke danke danke danke...