C# Frage zu MassageBox und zur automatischen Anpassung

Chapalala

Cadet 3rd Year
Registriert
Nov. 2012
Beiträge
56
Guten Abend,

ich möchte für ein Spiel gerne eine Zeit laufen lassen und diese dann am Ende in einer MassageBox ausgeben lassen.
Habe dafür ein Label erstellt mit

private void timer_tick(object sender, EventArgs e)
{
zahl++;
label1.Content = zahl.ToString();
}

Mittels eines Buttons (den man beim Start drückt) läuft die Zeit dann im Label hoch.
Wie schaffe ich es, dass die Zeit beim Beenden bzw. Lösen des Spiels in einer MessageBox angezeigt wird?
Habe leider noch nicht viel Erfahrung mit C# sammeln können. Bisher immer nur C++ programmiert.

Meine zweite Frage: Wie bekomme ich es hin, mehrere Button, beim Großziehen des Fensters, an das Fenster anzupassen?


Ich hoffe, man versteht was ich meine :cool_alt:

Wenn nicht, könnt ihr gerne fragen.


Schon mal ein riesen DANKE!!

Grüße
 
Chapalala schrieb:
Guten Abend,

ich möchte für ein Spiel gerne eine Zeit laufen lassen und diese dann am Ende in einer MassageBox ausgeben lassen.

Ganz wichtig: du musst MessageBox richtig schreiben, sonst versteht dich der Compiler nicht.

Du meinst die Zeitdauer, nicht die Uhrzeit, oder? Die Zeit brauchst du nicht laufen lassen, die läuft von alleine ;) Du musst dir nur merken wann es losgeht und wann es zuende ist. Also etwa so:

//deklaration
DateTime startzeit;

//beim start:
startzeit = DateTime.Now;
Timer1.Start();

//beim Ende
Timer1.Stop();
TimeSpan dauer = Datetime.Now - startzeit;
MessageBox.Show(Dauer.toString()); //ggf. noch formatieren


//beim Tick
TimeSpan dauer = Datetime.Now - startzeit;
label1.Content =Dauer.toString();

Chapalala schrieb:
Habe dafür ein Label erstellt mit

private void timer_tick(object sender, EventArgs e)
{
zahl++;
label1.Content = zahl.ToString();
}

Mittels eines Buttons (den man beim Start drückt) läuft die Zeit dann im Label hoch.

Mit dem Code zählst du nur die Ticks deines Timers, folglich bekommst du auch keine Zeit (du willst wohl auch eher die Dauer) angezeigt.


Chapalala schrieb:
Meine zweite Frage: Wie bekomme ich es hin, mehrere Button, beim Großziehen des Fensters, an das Fenster anzupassen?
Nimm WPF statt WF.
 
Guten Abend,

ich benutze WPF für das Spiel.

Soweit funktioniert es. Wie kann ich denn die Millisekunden weg bekommen, dass nur noch die Sekunden dastehen? Irgendwas mit (0,0,1) oder?
Und wie bekomme ich es hin, dass vor der Zeitangabe in der MessageBox noch ein Text wie "Du hast das Spiel in ZEITANGABE beendet" steht?

Vielen Dank!

Grüße
 
Chapalala schrieb:
ich benutze WPF für das Spiel.
Sehr gut, das macht es einfach. Wenn ich sowas mache hab ich die Buttons in einem Grid. Die Höhe/Breite der Rows/Colums geb ich relativ an (also mit *). Die Buttons sind vertikal und horizontal auf Stretch eingestellt und die Höhe und Breite auf Auto.

Chapalala schrieb:
Wie kann ich denn die Millisekunden weg bekommen, dass nur noch die Sekunden dastehen? Irgendwas mit (0,0,1) oder?
Benutzerdefinierte TimeSpan-Formatzeichenfolgen

Chapalala schrieb:
Und wie bekomme ich es hin, dass vor der Zeitangabe in der MessageBox noch ein Text wie "Du hast das Spiel in ZEITANGABE beendet" steht?
String.Format-Methode

Code:
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var ts = new TimeSpan(1,2,3,4,666);
            var dauer = ts.ToString(@"dd\.hh\:mm\:ss");
            var message = string.Format("Du hast das Spiel in {0} beendet", dauer);
            MessageBox.Show(message);
        }
 
Guten Abend,

leider hat mir dein Code nicht weitergeholfen, da dieser bei mir nicht so richtig compiliert wird, warum auch immer...

Hab nochmal versucht deine Vorschläge umzusetzen.
Die MSDN-Inhalte verstehe ich zwar, kann damit aber nicht richtig was anfangen.

Im Fenster wird nun der Text ausgegeben und oben im Fensternamen wird die Zeit angezeigt.
Wie muss ich das noch modifizieren, damit der Text, dann die Zeit und dann nochmal der Rest vom Text angezeigt wird?

Wie du mal geschrieben hast mit {0} usw.?
Sorry, falls ich jetzt doppelt gefragt habe.

Code:
private void timer_tick(object sender, EventArgs e)
        {
           
            TimeSpan dauer = DateTime.Now - startzeit;
            label1.Content = dauer.ToString();

        }

        private void buttonStop_Click(object sender, RoutedEventArgs e)
        {
            timer.Stop();
            TimeSpan dauer = DateTime.Now - startzeit;
            MessageBox.Show("Du hast das Spiel in", dauer.ToString());

Vielen vielen Dank!

Grüße
 
Im Fenster wird nun der Text ausgegeben und oben im Fensternamen wird die Zeit angezeigt.

Wie muss ich das noch modifizieren, damit der Text, dann die Zeit und dann nochmal der Rest vom Text angezeigt wird?
Wenn du der MessageBox nur ein Argument übergibst ist das der Text, bei zwei Argumenten ist das erste wieder der Text und der zweite die Caption (also der Fenstername). Da das nicht das ist was du willst musst du zuerst einen string zusammenbauen, den du dann als erstes Argument übergibst. Wie man Strings formatiert ist in dem Link erklärt. In meinem Beispiel siehst du es aber auch:
Code:
var message = string.Format("Du hast das Spiel in {0} beendet", tmp);

Im Prinzip sucht string.Format im string, den du als erstes Argument übergibst nach einer Zahl in geschweiften Klammern {0}, {1} etc. Die Klammern werden dann durch die folgenden Argumente ersetzt; {0} mit dem ersten, {1} mit dem zweiten etc.

Versuch es mal so:

Code:
private void timer_tick(object sender, EventArgs e)
        {
           
            TimeSpan dauer = DateTime.Now - startzeit;
            label1.Content = dauer.ToString();
 
        }
 
        private void buttonStop_Click(object sender, RoutedEventArgs e)
        {
            timer.Stop();
            TimeSpan dauer = DateTime.Now - startzeit;
            MessageBox.Show("Du hast das Spiel in", dauer.ToString());

            string tmp = ts.ToString(@"dd\.hh\:mm\:ss");
            var message = string.Format("Du hast das Spiel in {0} beendet", tmp);
            MessageBox.Show(message);


Der andere Code hat wohl nicht funktioniert, weil du dauer schon als TimeSpan deklariert hast. Sorry, mein Fehler, ich hätte das anders nennen müssen. Hatte den Code getestet und er hat funktioniert.
 
Zurück
Oben