Autor Beitrag
ralph71
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Fr 04.11.16 13:01 
Hallo,

simples Problem:
Ich habe auf Form1 einen Button. Dieser öffnet Form2. Form1 bleibt dabei offen.
Wird Form2 geschlossen, dann erscheint wieder Form1. Bis dahin ist alles gut.
Problem:
Beim erneuten Klick auf den Button im Form1 passiert gar nichts. Erst ein zweiter Klick auf den Button führt die Aktion aus.
Klickt man im Form1 auf eine leere Stelle und dann auf den Button funktioniert es auch.
Es scheint, als müsste das Form1 erst aktiviert werden und dann kann auf den Button geklickt werden.

Ich such schon Stunden rum, finde aber nur Dinge wie:
ausblenden C#-Quelltext
1:
2:
3:
Form1 frm = new Form1();
frm.Focus();
frm.Activate();
usw.

Hilft alles nichts.
Ideen?
Danke euch!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.11.16 20:46 
- Nachträglich durch die Entwickler-Ecke gelöscht -
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Mo 07.11.16 10:04 
Hallo Ralph,

ich verstehe nicht so ganz die Ursache deines Problems.

Ich zeige eine Form normalerweise so an:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// button event auf Form1
private void buttonShowForm2_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    
    // dann kannst du entscheiden, ob du auf Form1 immernoch zugreifen willst (also beide benutzbar)
    form2.Show();
    // oder während du auf Form2 arbeitest, Form1 solange blockiert ist
    form2.ShowDialog();   // gibt ein DialogResult zurück
}

Probleme damit hatte ich nie und die Form ist immer beim Start im Vordergrund.
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mo 07.11.16 15:14 
Tach,

du musst schon die richtige Instanz von Form1 nehmen. Einfach mit new eine neue Form erzeugen funktioniert nicht. Wenn du den Code zum fokussieren innerhalb von Form1 ausführst, reicht einfach Focus(). Bist du außerhalb von Form1 musst du dir die richtige Instanz deiner Form1 holen via Application.OpenForms.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 07.11.16 15:29 
Zitat:
du musst schon die richtige Instanz von Form1 nehmen. Einfach mit new eine neue Form erzeugen funktioniert nicht.


Wenn das das Problem wäre würde auch ein 2.ter Click auf den Button nicht helfen. Das scheint es aber.

Zitat:
Es scheint, als müsste das Form1 erst aktiviert werden und dann kann auf den Button geklickt werden.


Das ist nicht das Standardverhalten bei Winforms. Du mußt schon irgendwas zusätzlich gemacht haben um dieses Vehalten zu bekommen. Überleg nochmal was du alles gemacht hast bzw. zeige uns den relevanten Code.
ralph71 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 09.11.16 09:02 
Hallo,
... hat etwas gedauert.

Button in Form "Start":
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void metroButton1_Click(object sender, EventArgs e)
{
    Veranstaltungen frm = new Veranstaltungen();
    frm.Show();
}

Mehr is es nicht.

Habe dann folgendes versucht im Form Veranstaltungen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void close(object sender, FormClosedEventArgs e)
{
    Start frm = new Start();
    frm.Focus();
}

Das Formular hat das Metro-Design. Dürfte aber egal sein.
ausblenden C#-Quelltext
1:
public partial class Veranstaltungen : MetroFramework.Forms.MetroForm					


Da das wohl nicht das Standardverhalten ist, kann ich wenn alles nichts hilft ein neues Projekt anlegen.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 09.11.16 11:13 
Du erzeigst eine neue Start Form in close. Dieser gibst du den Focus ... zumindest versuchst du das weil du diese Form ja gar nicht anzeigst, es wäre eine ander Start Form die du so in den Vodergrund holst. Der Code ist sinnfrei.

Was willst du erreichen? Das was du tust scheint nichts mit dem zu tun zu was du im ersten Post beschrieben hast. Lies den nochmal selber. Entweder du willst was anders oder du hast hier und da in der Beschreibung Form1 und Form2 verwechselt.

Wichtig in deiner Überlegungen. Soll man die Form2/Veranstaltungen gleichzeitig mehr als einmal öffnen können? Wenn mehr als eine offen sein darf und mehr als eine offen ist soll beim schließen einer solchen Form die StartForm in den Vordergrund kommen oder die zuletzt benutzte andere Form der Anwendung. Letzteres wäre Standardverhalten.
ralph71 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 09.11.16 15:53 
Ursache für dieses Verhalten ist:
ausblenden C#-Quelltext
1:
public partial class Start : MetroFramework.Forms.MetroForm					


Warum das Layout dieses Verhalten zeigt, keine Ahnung.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 09.11.16 21:50 
- Nachträglich durch die Entwickler-Ecke gelöscht -
ralph71 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Do 10.11.16 08:17 
Wie soll es funktionieren?
Formular 1 hat einen Button, der Formular 2 öffnet. Formular 2 überdeckt dabei Formular 1 (weil beide in Vollansicht). Formular 1 kann also geöffnet bleiben.
Wird Formular 2 über das "Kreuz" geschlossen erscheint wieder Formular 1. Fertig.

Das Funktioniert auch, aber der Button in Formular 1 reagiert nur auf den zweiten Mausklick. D.h. ich muss um einen anderen Button klicken zu können VORHER irgendwo im Formular 1 einmal klicken.
Die Situation ist einfach nachzustellen:
* Neues Projekt
* 2 WinForms
* Form 1 als MetroFramework.Forms.MetroForm
* Button in Form 1 der Form 2 öffnet.

btw: wenn was nicht funktioniert, dann ist es meistens "unsachgemäß" ;-)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 10.11.16 11:04 
Warum verwendest du dann nicht einfach
ausblenden C#-Quelltext
1:
form2.ShowDialog(this);					

(anstatt Show())?
ralph71 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Do 10.11.16 11:40 
Mega!
Jetzt funktioniert es.

Vielen Dank!
You saved my day.