c# Button.click

Martin7

Cadet 1st Year
Registriert
Nov. 2007
Beiträge
13
Hallo,

blöde frage mal wegen den buttons.

ist das hier eig möglich in irgendeiner form? bekomms einfach nicht hin ;(

if(button1.click)
{
tu was.
}

lg martin
 
Nein... macht auch nicht viel Sinn in einer ereignisgesteuerten Umgebung...
Der Klick auf den Button löst ein Ereignis aus, an das kann man sich "dranhängen".
 
Ich kann dir leider nicht sagen, inwiefern das von C# Funktionen schon übernommen wird, aber generell funktioniert jedes Winowsfenster auf Nachrichten. Alles was du in diesem Fenster machst, ob Button drücken oder nur Maus bewegen, löst eine Nachricht aus, die an eine bestimmte Funktion geschickt wird. Dort kannst du die Nachricht auftrennen, d.h.: (sehr grob)

Wenn message == "Irgendeine Kennnummer des Buttons" dann Ereignis.

In der Praxis sähe das in etwa so aus: (Ist C++, dürfte sich aber nicht groß unterscheiden.)

Code:
{
    switch (message)
    {
    case WM_COMMAND:
        {
            switch(LOWORD(wParam)) //Hier wird die message WM_COMMAND nocheinmal aufgetrennt in hiword und loword
            {
            case IDC_HIER_BUTTON_ID:
            {
             Blafunktion(); //Hier ist die eigendliche Funktion die durch denk Knopfdruck ausgelöst wird.
            }
}
}
}


So in etwa funktioniert ein Winowsfenster.
 
In C# etwas anders: ;)
Bei der Definition des Steuerelements wird die Funktion die ausgeführt werden soll als EventHandler hinzugefügt, z.B. so:
Code:
void InitializeControls()
{
	Button btnKlick = new Button();
	btnKlick.Text = "Klick!";
	btnKlick.Click += new EventHandler(btnKlick_Click);

	this.Controls.Add(btnKlick)
}

void btnKlick_Click(object sender, EventArgs e)
{
	// was auch immer getan werden soll, z.B....
	MessageBox.Show("Hallo");
}
Wie man sieht bekommt die Funktion die Parameter sender vom Typ object und die EventArgs übergeben. Ist ja eigentlich selbsterklärend.

Eine C# Community
 
k das mit dem eventhandler weiß ich...

das problem ist...ich hab 5 buttons.....diese 5 buttons sollen gemeinsam auf das gleiche feld zugreifen können...aber dann muß ichs in global definieren...hm

wo ist dann der unterschied, denn dies ist ja möglich, bei der checkbox ?

und danke für eure hilfe

lg
 
wenn alle buttons auf das gleiche verweisen sollen, könntest du ja einfach jedem der 5

buttons den gleichen Code geben, also:



private void button1_Click(object sender, EventArgs e)
{
DialogResult result =
//hier dann auf das verweisen was du willst
}

ich weiß das ist ein bissle blöd ausgedrückt aber vielleicht funktionierts...

ps.: für die anderen buttons dann halt "button2(3;4;5)_Click" schreiben.
 
Du kannst bestimmt dem EventHandler die gleiche Funktion übergeben.

Bei dem was RoterWind vorgeschlagen hat verstehe ich ehrlichgesagt nicht so ganz den Sinn?!
 
1.) Bei dem Code in C++ musst du einmal zu dem Teil des switch case kommen. Wenn man nicht so lange pollen will, bis was kommt, dann muss man erst ein Ereignis abfangen oder in einem Thread eine blockierende Funktion verwenden, die auf den Tastendruck wartet.

2.) Ich würde einfach ein dein GUI die 5 Buttons reinziehen. Dann auf einen drauf klicken, dann kommt ca. der Code (ist zwar VB.NET aber ist nicht viel um):

Code:
public sub Button1_Click(Byval sender as Object, e as System.EventArgs) handles Button1.Click
'Dein Code, der irgendetwas tut
end sub

Du machst daraus einfach ein:
public sub Button_Click(Byval sender as Object, e as System.EventArgs) handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click

Damit fängst du 5 Ereignisse ab. In der Variable sender steht dann dein Button drin.

Kann auch sein, dass es in C# irgendwo oben in der Variablendefinition steht. Einfach etwas suchen und alle Ereignisse auf Button_Click umleiten.

Folgender Code kann gar nicht funktionieren:

if(button1.click)
{
tu was.
}

Wann soll da button1.click true liefern? Wenn der Button irgendwann einmal gedrückt wurde, dann funktioniert die Abfrage genau einmal richtig => eher schlecht
Wenn es true liefert, wenn man gerade jetzt die Maustaste gedrückt hat, dann darf man das ja nicht verpassen und muss ständig abfragen => auch schlecht
 
falls du visual studio (standard, express, prof,ts) benutzt, und die buttons über den designer angelegt hast...

doppelklick auf den ersten button, damit wird die Eventmethode im code erstellt.
danach für jeden button im eigenschaftenfenster auf die Eventproperties wechseln(dieser Button mit dem gelben Blitz), und dann beim gewünschten event (bei dir click) den Eventhandler des ersten Buttons aus der Liste auswählen.

Jetzt wird für jeden der Buttons nur diese eine Methode aufgerufen und über den Parameter "sender" kannst du auch noch innerhalb der Methode rausfinden, welcher Button das Event ausgelös hat.

Meiner meinung nach sollte das funktionieren.
 
Zuletzt bearbeitet:
Zurück
Oben