Autor Beitrag
Glowhollow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77



BeitragVerfasst: Mi 10.04.19 18:16 
Hallo, ich hab hier ein Phänomen. Ich weiß jetzt auch noch nicht, worans liegen kann. Vielleicht habt ihr ja ne idee.

Ich habe über den Designer, diverse Forms erstellt, alle mit mindestens einem Button.

So habe ich im moment 3 Forms, splash ruft die main form auf, und die mainform, soll eine info form aufrufen.

Die Buttons sind alle deklariert, und auch mit Funktionen hinterlegt.

Der momentane aufruf ist folgender.

splashscreen initialisiert und wird aufgerufen, passworteingabe, button drücken, main form lädt (splashscreen wird gehidet). Die Main Form, scheint aber auf keinen einzigen Buttonaufruf zu reagieren, obwohl die listener da drin sind.

Kann das was mit dem Splashscreen zu tun hat, das der da noch den fokus drauf hat ?

in der mainform, sehe ich wie der button reagiert, also die animation des drückens wird angezeigt, jedoch bleibt der button inaktiv. Der button ist auch aktiv gesetzt, daran liegts nicht.

Hat das irgendwas mit scope zu tun ?

der button, von der splashscreen form, liegt mit dem listener auch in der splashscreen form.

den zu drückenden button, liegt in der mainform (inkl. listener).

Irgendjemand eine Idee oder eine Richtung warum das so ist ?

Moderiert von user profile iconTh69: Titel (leicht) geändert (war "Winform button, trotz listener, keine Funktion").
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 10.04.19 19:39 
Wir können da (ohne Code) gerade nur spekulieren.

Da du in anderem Kontext schon von VB sprachst und man dort auch den Eindruck gewinnen konnte das dir der Unterschied zwischen einer Form und der Instanz einer Form unklar ist (was VB leider auch teilweise zusätzlich verwischt) könnte ich mir vorstellen das du einfach irgendwo eine weiter Instanz einer deiner Formen erzeugt hast um die Events zu verdrahten. Das sind aber im Zweifel nicht die Instanzen der Formen die gerade angezeigt werden. Und wenn du auf einer Instanz der Form auf den Buttons rum klickst während du die Events einer anderen Instanz dieser Form verdrahtet hast laufen die Klicks natürlich ins Leere.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 11.04.19 04:50 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Glowhollow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77



BeitragVerfasst: Do 11.04.19 10:07 
Danke Frühlingsrolle für deine Arbeit, das hilft mir schon mal weiter.

Um Ralfs Frage zu beantworten zum thema code...

Hier kurz ein grober Überblick was das Program macht.

Program.cs ist der Haupteinstieg.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
namespace GDISClient
{
    public class Program 
    {
        
        public static Program current ;
        public static Form_main mainForm;
        public static Splashscreen splash;
        public static Fulltable fulltable;
        public static Debugform debug;
        public static Pwchange pwchange;
        public static Info_screen info;


        private static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var formular1 = new Form_main();
            mainForm = formular1;
            var fulltbl = new Fulltable();
            fulltable = fulltbl;
            var dbgfrm = new Debugform();
            debug = dbgfrm;
            var pwchg = new Pwchange();
            pwchange = pwchg;

            Application.Run(splash);
        }
     }
}


Wir sehen wird splash aufgerufen. Durch die Initialisierung von Form Main, in der auch der splashscreen erzeugt wird und in die referenz in die staticvariable in program.cs übergeben wird, wird splash danach gestartet. Splashscreen an sich selbst, hat die notwendige Funktionalität.

In splash selbst, gibt es einen button.

ausblenden C#-Quelltext
1:
2:
3:
4:
private void Button_Splash_Login_Click(object sender, EventArgs e)
{
    LOGIN();
}


ausblenden C#-Quelltext
1:
LOGIN()					

befüllt, die werte und führt folgendes aus
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void LOGIN()
{
    .... (werte die gesetzt werden)
    this.Hide();
    mainForm.Show();
}


in der mainForm, habe ich folgenden button
ausblenden C#-Quelltext
1:
2:
3:
4:
private void btnmainshowinfo_Click(object sender, EventArgs e)
{
    MessageBox.Show("funzt");
}

Dennoch erreicht der Button nicht sein ziel. Ich werde das heute mal debuggen und gucken worans liegt. Wenn jemand aber eine Idee hat, woran das liegen könnte, wär echt nice.

[EDIT]... alle anderen Funktionen in mainForm funktionieren, nur die buttons nicht

Vielen dank

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt

Moderiert von user profile iconTh69: Beiträge zusammengefasst

ok, der eventhandler hat für den button gefehlt.
ausblenden C#-Quelltext
1:
this.sfButton10.Click += new System.EventHandler(this.sfButton10_click);					

das war nur ein testbutton, aber der funktioniert jetzt.

danke an alle die beteiligt waren.
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 11.04.19 11:18 
Das Design solltest du aber dringend überarbeiten. Globale (public static) Variablen sind ein No-Go in der objektorientieren Programmierung.
Das Beispielprojekt von user profile iconFrühlingsrolle ist schonmal ein guter Anfang (auch wenn ich den Splashscreen (s. aber PS), wie ich schon im anderen Thema von dir geschrieben habe, nicht in der MainForm, sondern vor Application.Run() aufrufen würde).

PS: Dein Splashscreen scheint wohl eher ein Login-Dialog zu sein (dann solltest du es auch passend benennen). Unter einem Splashscreen versteht man eigentlich nur ein Bild (oder eine Animation), das während des Startens des Programms ohne Nutzerinteraktion angezeigt wird (und dann automatisch wieder verschwindet, sobald die Hauptform dargestellt ist).

PPS: Außerdem ist dein Eingangsbeitrag schlecht formatiert und damit schwer zu lesen (zudem noch mangelnde Groß-/Kleinschreibung). Du solltest es vermeiden, nur jeweils einen Satz pro Zeile zu schreiben und dann auch noch unnötige Leerzeilen zu benutzen!