Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 08.06.15 19:43 
Hallo,
ich hänge mal wieder :-( und vermutlich wieder an einer Kleinigkeit.

Ich habe eine Form, welche mir Daten sendet, die der Benutzer dort eingibt. (so wie ein FeatureRequest)
Dieses funktioniert auch. NUn wollte ich dieses weiter nutzen um mir Daten eines anderen Forms schicken zu lassen.
Hierzu habe ich eine Property gemacht, die ich von außen füllen wollte und dann automatisiert, den Button "Senden" Drücken lassen wollte

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        public string Lizens
        {
            set 
            {
                txtInhalt.Text = value;
                btnSenden_Click(sender, e);
                Close();
            }
        }

Dies funktioniert nicht, weil er nicht mit den sender,e zurecht kommt. DIes wäre ein Typ, und wird wie eineVariable verwendet.

Wenn ich eine PublicMethode einbaue, die ich aufrufen will nachdem die Property gef+llt ist, funktioniert dies aus demselben Grund nicht.
Ich weiß nicht was ich falsch mache, da ich dies an anderer Ecke eigentlich schon mal verwendet hatte :-(

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        public string Lizens
        {
            set 
            {
                txtInhalt.Text = value;
            }
        }

        public void Senden()
        {
            btnSenden_Click(sender, e);
            Close();
        }


Könnt ihr mir bitte helfen?

Danke

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 08.06.15 20:11 
Eine reine Setter Property finde ich sehr unschön. Das macht man eigentlich nur bei Properties die im Code nicht selbst benutzt werden (sondern nur indirekt z.B. von einem Dependency Injection Framework). Mach lieber eine simple Methode und übergib halt die Lizenz einfach als Parameter der Methode. Das ist für jemand Fremden der mit deinem Code arbeiten müsste durchschaubarer.

Eine EventHandler ist genauso eine Methode wie jede andere auch also musst du die auch mit richtigen Daten bestücken. Als sender bekommst du ja immer das betroffene Control (hier also der Button) und irgendwelche besonderen EventArgs. Beim Click Event gestaltet sich das einfach da der keine besonderen Properties hat nur eine leere Standard EventArgs Instanz.

Das sähe dann so aus (anstatt EventArgs.Empty geht auch genauso new EventArgs() oder wenn du weder sender noch EventArgs benutz kannst du auch für beides einfach null übergaben).
ausblenden C#-Quelltext
1:
2:
3:
btnSenden_Click(btnSenden, EventArgs.Empty);
//oder
btnSenden_Click(nullnull);  // wenn einem Stil egal ist ;) und der EventHandler die Parameter nicht benutzt


Aber zum Ausführen des Klicks hat ein Button auch eine Methode die man einfach aufrufen kann.
ausblenden C#-Quelltext
1:
btnSenden.PerformClick();					


Aber aber ;) einen EventHandler so im Code aufzurufen ist ganz schlechter Stil (beide obigen Möglichkeiten). Wenn du Code hast der von einem Event ausgeführt werden soll und direkt aus dem Code dann gehört dieser Code in einer eigene Methode! Diese Methode kannst du dann ja aus dem EventHandler aus aufrufen und normal aus deinem Code. Ziel sollte sowieso immer sein möglichst wenig Code in einem EventHandler zu haben. Üblicherweise nur auslesen und aufbereiten der EventArgs, wenn nötig, und damit dann eine Methode aufrufen die das eigentliche Werk vollbringt.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 09.06.15 07:38 
Morgen Ralf,
danke für deine ausführliche Mail.
Den Anfang was "schlecht" wäre habe ich schon verstanden :-)
Der letzte Absatz, wie ich es nun umsetzen sollte bisher noch nicht.

Ich versuche da mal mein Glück.
Vielen Dank.

Gruß

EDIT:
Ich wollte es jetzt erst mal auf dem schlechteren Weg lösen, da ich noch nicht verstanden habe wie ich den Rest bauen sollte.
Da muss ich noch 2-3 x lesen ;-)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        public void Lizens_Senden(string lizens)
        {
            txtInhalt.Text = lizens;
            btnSenden.PerformClick();
        }

Aber auch dies funktioniert leider nicht.
Es kommt kein Fehler oder ähnliches aber es passiert auch nichts.

Danke
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: Di 09.06.15 10:40 
Was Ralf meint, ist folgendes:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void btnSenden_Click(object sender, EventArgs e)
{
    SendeLizens("SchlagMichTot");
}

public void SendeLizens(string lizens)
{
    txtInhalt.Text = lizens;

    // hier den Code vom Button-Event
}


Falls du da noch verschiedene Aufgaben in den einzelnen Methoden erledigen musst, lege den gemeinsamen Code in eine Methode:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
private void btnSenden_Click(object sender, EventArgs e)
{
    AktiviereLizens("SchlagMichTot");
}

public void SendeLizens(string lizens)
{
    // hier individueller Code, z.B.
    txtInhalt.Text = lizens;
    AktiviereLizens(lizens);   
}

private void AktiviereLizens(string lizens)
{
    // hier der gemeinsame Code, z.B.
    byte[] license = Encoding.UTF8.GetBytes(lizens);
    TcpClient client = server.AcceptClient();
    NetStream stream = client.GetStream();
    stream.Write(license);
    client.Close();
    Close();
}

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 19.06.15 12:48 
Vielen Dank