Benutzer mit den meisten Antworten
Buttonfarbe per Threading ändern

Frage
-
hallo, im Bezug auf die Lösung von Marcel http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/thread/6bbb29f0-bdeb-4d6b-aa11-51403a0e6324.
private Color[] colors = new[] { Color.Orange,[...] };
Kann ich Color.Orange etc. ändern und dort eine Methode aufrufen zur Farbbestimmung meines Buttons?Teilquelltext meiner Methode colr()
public void colr() { Color.FromArgb(255,255,255); int i = 0; i = 255; while (i != 100) { Color.FromArgb(255,i,i); i-- } }
Antworten
-
Hi,
this bezieht sich immer auf die Instanz der Klasse in der sich der Code befindet. Deiner Methode button1_click hat einen Parameter namens sender, der vom Typ Object ist. Dies ist wie der Name schon sagt der Sender des Ereignisses. Für den Fall, dass Du nur die Farbänderung haben willst und sonst keinen spezifischen Code der je nachdem welcher Button gedrückt wurde unterschiedlich ausführen willst, so kannst Du das sender Object einfach an Deine ColorButton() Methode übergeben.
In der ColorButton() Methode benutzt Du dann Dein object a um die Eigenschaften zuzuweisen wie z.B.:
a.BackColor = Color.FromArgb(255, 255, 255);
...
Besser wäre es allerdings bei Deinem object a erstmal zu überprüfen, ob es vom Typ Button ist und dann auch in einen Button zu casten.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert as_1985 Dienstag, 4. Oktober 2011 07:27
-
Da ich mehr in VB mache, kann ich Dir nicht sagen, ob das so funktioniert, aber einen Versuch wäre es Wert:
If (a is Button) { Button MyButton = (Button)a; MyButton.BackColor=Color.FromArgb(255, 255, 255); ...... }
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert as_1985 Dienstag, 4. Oktober 2011 07:27
Alle Antworten
-
Mach das nicht per Threading, das ist nur unnötig kompliziert, mach dasper Timer! Aus deinem Posting schließe ich, dass du einen Button suchst,der kontinuierlich die Farbe ändert. Das machst du am einfachsten, indemdu eine Klasse von Button ableitest. Statt ihn von außen zu manipulierenmacht die neue Klasse das von innen heraus. Das hat den Vorteil, dass dubeliebig viele Objekte davon erzeugen kannst und alle habem dieseEigenschaft von Haus aus.using System;using System.Drawing;using System.Windows.Forms;namespace ColorButtonApp{class FancyButton : Button{Timer t1 = new Timer();int red = 10;int green = 20;int blue = 30;public FancyButton(){t1.Tick += new EventHandler(t1_Tick);t1.Interval = 50;t1.Start();}void t1_Tick(object sender, EventArgs e){this.BackColor = Color.FromArgb(red % 256, green % 256,blue % 256);red += 3;blue += 4;green += 7;}}}Die Initialisierung und den Tick-Handler kannst du natürlichimplementieren wie du willst, das ist hier nur ein Beispiel. Du brauchstgar nicht viel zu tippen. Rechstklick auf das Projekt, Klassehinzufügen, Namen verpassen und fertig. Dann änderst du noch im fileForm1.Designer.cs die Deklaration vonprivate System.Windows.Forms.Button button1;aufprivate FancyButton button1;Das war's
-
Danke für deine Antwort,
ich möchte einen Button, der nur bei Klick die Farbe ändert. Sprich Form wird geöffnet, Button hat Ausgangsfarbe xy.
Klick auf Button, Button ändert die Farbe, wie z.B. aus deinem Post, kehrt nach X Sekunden wieder in Ausgabsposition zurück und bleibt wieder in Ausgabslage, bis erneut geklickt wird.
-
Hallo,
ich hab jetzt eine eigene Methode geschrieben, die funktioniert nun auch wie gewünscht. Jedoch möchte ich diese nicht für jeden Button neu schreiben, wie übergebe ich korrekt, welcher Button gedruckt wurde?
Hier mal ein kleiner Teil..
public void button1_Click(object sender, EventArgs e) { object a = button1; ColorButton(a); } public void ColorButton(object a) { a = this; this.BackColor = Color.FromArgb(255, 255, 255); // this hat hier leider "FormX" nicht den Inhalt von a [...] while (i != 120) { this.BackColor = Color.FromArgb(255, i, i); this.Refresh(); [...] } }
-
Hi,
this bezieht sich immer auf die Instanz der Klasse in der sich der Code befindet. Deiner Methode button1_click hat einen Parameter namens sender, der vom Typ Object ist. Dies ist wie der Name schon sagt der Sender des Ereignisses. Für den Fall, dass Du nur die Farbänderung haben willst und sonst keinen spezifischen Code der je nachdem welcher Button gedrückt wurde unterschiedlich ausführen willst, so kannst Du das sender Object einfach an Deine ColorButton() Methode übergeben.
In der ColorButton() Methode benutzt Du dann Dein object a um die Eigenschaften zuzuweisen wie z.B.:
a.BackColor = Color.FromArgb(255, 255, 255);
...
Besser wäre es allerdings bei Deinem object a erstmal zu überprüfen, ob es vom Typ Button ist und dann auch in einen Button zu casten.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert as_1985 Dienstag, 4. Oktober 2011 07:27
-
Ja, das mit dem sender übergeben und das a in meiner Methode ColorButton zu benutzen, das hab ich soweit. Das Problem wird mit dem cast sein, bzw. der Prüfung ob vom typ Button.
da a.BackColor oder sender.BackColor sagt, dass "object " does not contain a definition for BackColor..
Da steh ich grad auf dem Schlauch :) -
Da ich mehr in VB mache, kann ich Dir nicht sagen, ob das so funktioniert, aber einen Versuch wäre es Wert:
If (a is Button) { Button MyButton = (Button)a; MyButton.BackColor=Color.FromArgb(255, 255, 255); ...... }
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert as_1985 Dienstag, 4. Oktober 2011 07:27
-
Hab mal etwas versucht,
folgendes Ergebnis aus dem Debugging:
a = object {System.Windows.Forms.Button}
if (a is Button) {...}
true
Das Problem weiterhin ist, dass a.BackColor nicht angenommen wird, "object " does not contain a definition for BackColor..
**Update**
funktioniert.
- Bearbeitet as_1985 Dienstag, 4. Oktober 2011 07:27
-
Hans, ich frage mich grad echt wo dein Problem ist, deine Lösung hat nicht gepasst, bist jetzt traurig dass du keine korrekte Antwort auf meine Frage stellen konntest? Lass es doch darauf beruhen, dass Heslacher mir helfen konnte, meine Lösung zum funktionieren zu bekommen.
-
Am 04.10.2011 11:02, schrieb as_1985:> Hans, ich frage mich grad echt wo dein Problem ist, deine Lösung hat> nicht gepasst, bist jetzt traurig dass du keine korrekte Antwort auf> meine Frage stellen konntest? Lass es doch darauf beruhen, dass> Heslacher <../../../../profile/heslacher/> mir helfen konnte, meine> Lösung zum funktionieren zu bekommen.Der Ansatz ist ebenso wiewhile (i != 120){this.BackColor = Color.FromArgb(255, i, i);this.Refresh();[...]}von Grund auf falsch. Das *scheint* nur zu funktionieren aber dieSchiene endet auf dem Abstellgleis, glaub es.