Autor Beitrag
Nextlive
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 19.04.11 14:22 
Hi zusammen,

ich bin im Moment ein größeres Programm am schreiben und hab leichte Probleme mit dem wechseln von Forms. Wenn sich jetzt jemand fragt, warum jemand ein größeres Programm ohne solche Kenntnisse schreibt: Ich spring gern ins kalte Wasser, weil ich es so am besten lerne. Deshalb such ich mir die Sachen lieber zusammen und versuch diese zu verstehen, anstatt tausende Tutorials und Bücher durchzulesen.
Naja zu meinem Problem:

Ich benutze Visual Studio 2010 und habe dort ein C# Projekt am laufen. Meine erste Form, die sichtbar ist beim Programmstart, ist ein Loginscreen. Dort ist auch, aufgrund der Benutzung von Mysql, ein LinkLabel, womit man zu einer anderen Form wechseln soll beim Anklicken, auf dem man Verbindungseinstellungen konfigurieren kann. Problem ist nur: Wie wechsel ich die Form? Hab dem Projekt eine neue Win Form hinzugefügt, diese schon designed und möchte nun auf diese zugreifen. Dafür sei jetzt Loginform als Form1 benannt und die zweite Form2. Ich möchte nun Form2 einblenden lassen, darum gehts eigentlich nur.

Hoffe ihr könnt mir weiterhelfen :)


Edit: Die Forms werden im projekt immer mit .cs benannt also dann Form1.cs und Form2.cs
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 19.04.11 14:31 
Kurz:
Eine Form zeigt man mit ihren Funktionen Show oder ShowDialog an.
Nextlive Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 19.04.11 14:58 
ja das wusste ich auch schon, trotzdem danke.

hab hier mal einen screen wie es im solutionexplorer aussieht

user defined image

aber iwie kommt auch nichts wenn ich Verbindungseinstellungen.Show; eingebe
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 19.04.11 15:17 
Du musst ja auch erst eine Instanz der Klasse "Verbindungseinstellungen" erstellen (new) und diese dann anzeigen.
Nextlive Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 19.04.11 15:44 
ich hab mal weiter gegoogelt und dann dies gefunden:

Form Verbindungseinstellungen = new Form();

aber dann zeigt der mir natürlich nur ein leeres Fenster an :(

sry ich hab noch nicht viel mit C# gearbeitet bzw nicht viel mit GUI daher hab ich da keine ahnung.
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 19.04.11 15:53 
Aber du wirst doch wohl wissen wie man ein Objekt erstellt. (und eine Variable dafür deklariert)

Schaun wir uns doch mal ein einfaches Beispiel an:
ausblenden C#-Quelltext
1:
2:
int integerVariable = 5;
//Klasse(bzw Typ) name = Wert;


genauso musst du mit deiner Klasse Verbindungseinstellungen umgehen.
also
ausblenden C#-Quelltext
1:
Verbindungseinstellungen  newForm = new Verbindungseinstellungen(parameter);					

und schon hast du ein neues Objekt/Instanz der Klasse "Verbindungseinstellungen" mit dem du arbeiten (z.B. anzeigen) kannst.


Edit:
Vielleicht solltest du dich erstmal mit dem Prinzip der objektorientierten Anwendungsentwicklung und Grundlagen wie Klassen und Objekten auseinandersetzen bevor du etwas größeres probierst.
Nextlive Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 19.04.11 18:01 
ok die ganze aufregung umsonst -.-
danke für die hinweise. das mit der neuen klasse wusste ich bereits, das problem war nur, dass ich immer den falschen namen gesetzt habe.

statt den richtigen Form-Namen zu benutzen:

GUI_CONNECTIONDETAILS frmconn = new GUI_CONNECTIONDETAILS();

hab ich immer:

Verbindungseinstellungen frmconn = new Verbindungseinstellungen();

benutzt. Verbindungseinstellungen ist aber der Name der Source File -.-

Aber es läuft jetzt danke :D
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 19.04.11 19:31 
Hallo,

eine übliche Vorgehensweise ist es eigentlich, Datei- und Klassennamen gleich zu benennen :-)
Scofield2011
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Di 19.04.11 22:26 
Hallo,

also ich, auch neu als C# Programmierer (oder besser zukünftiger), das gleiche Problem.

Ich habe zwei Forms erzeugt und gestaltet.

Im ersten habe ich ein Menu eingebaut und beim Click auf den Menupunkt About soll sich das zweite Form mit den entsprechenden Daten öffnen.

Folgenden Code habe ich beim Menupunkt About eingefügt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox1 f2 = new AboutBox1();
            f2.ShowDialog();
        }


Es öffnet sich zwar wie gewünscht ein Form, aber dieses ist leer.

Jetzt meine Frage: Was habe ich falsch gemacht oder vergessen? Und warum wird ein leeres erzeugt, sollte die neue Instanz des Forms nicht genau wie das von mir gestaltete aussehen?

Vielen Dank schon einmal im voraus für eure Hilfe.


Zuletzt bearbeitet von Scofield2011 am Mo 14.11.11 22:08, insgesamt 1-mal bearbeitet
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Mi 20.04.11 08:11 
es müsste eine Form angezeigt werden das wie deine AboutBox1 aussieht (ist ja auch eine AboutBox1)
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Mi 20.04.11 09:34 
Schau doch mal, ob in deiner AboutBox1 im Constructor (dass ist die Funktion, die genauso heißt wie deine Klasse) der Aufruf InitializeComponents steht.


Es sollte in etwas so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public class AboutBox1 : Forms
{
   public AboutBox1()
   {
      InitializeComponents();
   }
}
Nextlive Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 20.04.11 13:28 
Ich hab das gleiche Problem ja auch gehabt.
So den Fehler den ich die ganze Zeit gemacht habe war, dass ich die ganze Zeit den Namen der .cs Datei genommen habe.
Im Solution Explorer ständ dann, auf dein Beispiel bezogen, bei mir z.B. AboutForm.cs

Wenn ich jetzt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutForm f2 = new AboutForm();
f2.ShowDialog();
}


als Code habe, dann kommen Fehlermeldungen.
Du musst gucken, wie deine Form heißt, also nach der Name Eigenschaft.
Bei mir heißt dann z.B. die About Form "aboutfrm".

Richtig wäre dann:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
Aboutfrm f2 = new Aboutfrm();
f2.ShowDialog();
}


Hoffe du meintest das Problem
Nextlive Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 20.04.11 13:35 
Aber ich hab zu den Forms auch nochmal ne Frage:

Hab jetzt Form1 und Form2. Form1 ist der Loginscreen und Form2 das Hauptfenster.
Wenn jetzt der Login erfolgreich war, soll auf Form2 gewechselt und Form1 geschlossen werden. Alles läuft ohne Probleme, bis auf das Schließen von Form1. Nach der Überprüfung von Benutzernamen und Passwort erscheint Form2, aber Form1 lässt sich nicht schließen.
Wenn ich

ausblenden C#-Quelltext
1:
2:
Form1 frmlogin = new Form1();
frmlogin.Close(); //Oder .Hide();


hinter den Code zum Öffnen von Form2 schreibe, tut sich nichts. Dann hab ich versucht aus Form2 heraus Form1 zu schließen (beim Load Event) aber auch da tut sich nichts :(
Wie kann ich jetzt Form1 schließen?
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Mi 20.04.11 13:47 
Du erstellst eine neue Form1 und schließt diese.
(Es sind 2 unterschiedliche Instanzen von Form1.)

Wie gesagt schau dir erstmal Grundlagen zu Klassen und Objekten an sonst wird das nichts.
Scofield2011
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Do 21.04.11 00:13 
Danke erst einmal für eure Antworten.

ein InitializeComponents() gibt es in der Klasse.

Der Name stimmt auch, es kommen bei mir keine Fehlermeldungen sondern ein leeres Form, das hat gerade einmal das Kreuz in der oberen Ecke zum schließen, aber eben leider nicht den Inhalt.

Ich habe das Form übrigens über Project -> Add Windows Form und dann About Box angelegt, den Rest hat Visual Studio dann fast von alleine gemacht.

Ich habe dann nur noch

ausblenden C#-Quelltext
1:
2:
3:
public partial class AboutBox1 : Form
{
}


in die Klasse von Form1 eingefuegt, da ich ohne nicht einmal oben beschriebenen Code ausfuehren kann.


Zuletzt bearbeitet von Scofield2011 am Mo 14.11.11 22:10, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 21.04.11 03:57 
user profile iconNextlive hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich jetzt Form1 schließen?
Du bist ja noch in Form1, wie wäre es mit:
ausblenden C#-Quelltext
1:
this.Hide();					


user profile iconScofield2011 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe dann nur noch

public partial class AboutBox1 : Form
{}

in die Klasse von Form1 eingefuegt, da ich ohne nicht einmal oben beschriebenen Code ausfuehren kann.
Du erstellst als eine neue leere Klasse, die nur von Form abgeleitet ist, und wunderst doch dann, dass diese leere Klasse auch angezeigt wird? :shock: Na gut... was soll ich sagen...

Steht denn die AboutBox1.cs im Projekt rechts mit drin?

Wenn ich ein neues Projekt erstelle und dann ein Infofeld dem Projekt hinzufüge, dann kann ich den Code in einem Button des ersten Formulars sofort problemlos ausführen. Keine Ahnung was du da machst. :nixweiss:
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 21.04.11 09:33 
user profile iconScofield2011 hat folgendes geschrieben Zum zitierten Posting springen:
Danke erst einmal für eure Antworten.

ein InitializeComponents() gibt es in der Klasse.

Der Name stimmt auch, es kommen bei mir keine Fehlermeldungen sondern ein leeres Form, das hat gerade einmal das Kreuz in der oberen Ecke zum schließen, aber eben leider nicht den Inhalt.

Ich habe das Form übrigens über Project -> Add Windows Form und dann About Box angelegt, den Rest hat Visual Studio dann fast von alleine gemacht.

Ich habe dann nur noch

public partial class AboutBox1 : Form
{}

in die Klasse von Form1 eingefuegt, da ich ohne nicht einmal oben beschriebenen Code ausfuehren kann.

Mach Dir einen Button in der Form1 mit dem Du die About Box aufrufen kannst. Da rein schreibst Du sowas hier:

ausblenden C#-Quelltext
1:
2:
            AboutBox1 dlg = new AboutBox1();
            dlg.ShowDialog();

Ansonsten steht im Code von der Form mit dem Button nichts weiter über die AboutBox.
Dann sollte das doch gehen.
Oder habe ich was verpasst was Du tolles machen willst?

_________________
Gruß Markus
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Do 21.04.11 09:46 
Lass raten, dein Code sieht so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class Form1 : Form
{
    public Formi1()
    {
         InitializeComponents();
    }

    public partial class AboutBox : Form
    { }
}


Wie wäre es denn, wenn du einfach mal dein Code postest anstatt uns die ganze Zeit im Trüben fischen zu lassen? Geh doch mal auf die .cs-Datei wo du die AboutBox definiert hast, wähle alles aus und kopiere es hier ins Forum.
Scofield2011
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Do 21.04.11 21:32 
Danke noch einmal für eure Hilfe.

Da muss ich wohl das mit der partial class falsch verstanden haben, ich dachte das man die Klasse dann an mehreren Stellen im Code sozusagen teilweise definieren kann und da nach dem Einfügen dieses Code Teils wenigstens ein Fenster kam, sah ich meine Annahme bestätigt.

Inzwischen habe ich mein Problem übrigens gelöst, bei mir wurden in beiden Forms unterschiedliche Namespaces benutzt. Das hatte ich bisher irgendwie übersehen. Ferner bin ich davon ausgegangen das ein automatisch erzeugtes Form sozusagen einsatzbereit erzeugt wird.