Text in Fensterleiste während Programmlauf ändern

Christian Kusmanow

Erfahrenes Mitglied
Also ich seh hier nicht mehr durch. :confused:
Wir haben meines erachtens doch überhaupt keinen Ansatz.
Klar ist doch das man in das Text Property ohne weiters hinschreiben kann.
Daher muss sich doch die Frage darauf beziehen,
das sie es irgendwie nicht schafft, vom FahrProzess zum Form zu gelangen,
und die Aktuelle Geschwindigkeit auszugeben.
Entweder wird das hier jetzt ein Orkael Wettkampf, :D
oder ich seh echt nicht mehr durch.
 

broetchen

Erfahrenes Mitglied
Er will, dass sich der Text in der Fensterleiste kontinuierlich aktualisiert und die Geschwindigkeit des Autos anzeigt.

Es gibt hier somit (u.a.) zwei Ansätze:
1. Polling
Er fragt immer und immer wieder ab, wie schnell das Auto im Moment ist.
Wenn sich, wie ich es verstanden habe, ein Fenster immer neu zeichnet, könnte man hier z.B. das Paint-Event des Fensters hernehmen und darin die Text-Property aktualisieren (mein Vorschlag mit der OnPaint-Methode s.o.).

2. Events
Das Auto meldet sich zu Wort, wenn sich seine Geschwindigkeit ändert.
Hier müsste die Klasse Auto (oder wie auch immer die heißt) einen Event anbieten, der beim ändern der Geschwindigkeit abgefeuert wird.
Das Fenster registriert sich beim Event und aktualisiert seine Text-Eigenschaft im Handler.

mfg broetchen
 

Norbert Eder

Erfahrenes Mitglied
Meine Güte, ihr glänzt wieder ...

Also, zwei Möglichkeiten:

1. Das "Auto" befindet sich innerhalb der Form, dann kann gleich beim Ändern der Geschwindigkeit ein Form1.Text = "mei text"; gemacht werden.

2. Das "Auto" ist eine Klasse die zb in einem Thread läuft. Dann braucht das Auto ein Event das zB SpeedChanged wirft. In der Form kann nun dieses Event aufgefangen werden und damit kann dann auch der Text in der Titelleiste geändert werden.

Ad käsebrot: Why OnPaint? Why why why why? Er will ja nicht die gesamte Form selbst zeichnen ...
 

broetchen

Erfahrenes Mitglied
Die Idee mit dem OnPaint ist hinfällig. Ich wusste nicht (wie ich auch mehrmals angedeutet habe; immerhin war's nur ein Vorschlag), wann genau ein Fenster neu gezeichnet wird. Dachte, das geschieht immer und immer wieder, aber dem ist wohl nicht so.

Aber danke, dass mich so viele Leute darauf hingewiesen haben. Hauptsache meckern.

Und die Idee mit einem Event ist mir auch gekommen!
 

123arne

Mitglied
Huch, jetzt hat mich der gmx-Spamfilter boykottiert und mir die Antworten vorenthalten..
Also das Auto ist ein umgebauter Button. Von Button abgeleitete Klasse.
Code:
public class CAuto : Button
Das fährt in einem Thread innerhalb des Form.(Methode in CAuto)
Code:
public void Fahren(int v)
  		{
  			
  			int n = 0;
  			while (n < 700)
  			{
 				this.Location = new System.Drawing.Point(24+n, 88);
  		        System.Threading.Thread.Sleep(200-this.Geschwindigkeit);
  				Application.DoEvents();
  				n++;
  			}
  		}
Dann hab ich einen Button, der die Geschwindigkeit des Autos beim Klick erhöht. Genau bei diesen Klick soll auch der Text oben im Fenster neu geschrieben werden. und genau da häng ich fest.
Code:
private void schnell_Click(object sender, System.EventArgs e)
  		{
 		 if(this.auto.Geschwindigkeit >= 190){MessageBox.Show("Dies ist kein Flugzeug Schumi");}
  			else 
  			this.auto.Geschwindigkeit += 10;
  			 hier muss das irgendwie rein  
  		}

Vielen DaNK FÜR EURE mÜHE
Gruß Arne
 

broetchen

Erfahrenes Mitglied
Wo is da das Problem?
Code:
private void schnell_Click(object sender, System.EventArgs e)
{
	if(this.auto.Geschwindigkeit >= 190)
                {
                         MessageBox.Show("Dies ist kein Flugzeug Schumi");
                }
  	else
                { 
  		this.auto.Geschwindigkeit += 10;
                                this.Text = this.auto.Geschwindigkeit.ToString();
                }
}

EDIT: Könnte man das Textfeld bitte so machen, dass man Tabs eingeben kann!?