Passage d’une variable (temps) d’un formulaire à un autre C #

Disons que j’ai deux formes. Le premier contient le bouton de démarrage et le second est le bouton d’arrêt. Existe-t-il un moyen de déterminer le temps écoulé entre l’appui sur les boutons Démarrer et Arrêter et l’afficher sous la deuxième forme.

J’ai essayé de faire cela et arriver à ces codes

Formulaire 1: bouton de démarrage

namespace WindowsFormsApplication1 { public partial class Form1 : Form { public DateTime startTime2; public DateTime endTime; public TimeSpan ts_timeElapsed; public ssortingng s_timeElapsed; public Form1() { InitializeComponent(); } private void StartButton_Click(object sender, EventArgs e) { startTime2 = DateTime.Now; Form2 frm = new Form2(); frm.Show(); this.Hide(); } private void Button2_Click(object sender, EventArgs e) { Instructions frm = new Instructions(); frm.Show(); this.Hide(); } } } 

Forme 2: bouton d’arrêt

 namespace WindowsFormsApplication1 { public partial class RoadSign1Meaning : Form { public DateTime startTime1; public DateTime endTime; public TimeSpan ts_timeElapsed; public ssortingng s_timeElapsed; public RoadSign1Meaning() { InitializeComponent(); } public ssortingng GetElapsedTimeSsortingng() { int days = ts_timeElapsed.Days; int hours = ts_timeElapsed.Hours; int mins = ts_timeElapsed.Minutes; int secs = ts_timeElapsed.Seconds; ssortingng x = ""; if (days != 0) { x += days.ToSsortingng() + ":"; } if (hours != 0) { x += hours.ToSsortingng() + ":"; } if (mins != 0) { x += mins.ToSsortingng() + ":"; } if (secs != 0) { x += secs.ToSsortingng(); } return x; } private void StopButton_Click(object sender, EventArgs e) { endTime = DateTime.Now; ts_timeElapsed = (endTime - startTime1); s_timeElapsed = GetElapsedTimeSsortingng(); ElapsedLabel.Text = "Time Elapsed: " + s_timeElapsed; Form3 frm = new Form3(); frm.Show(); } } } 

Cependant, le problème est que la valeur temporelle du formulaire 1 n’est pas sauvegardée et que le formulaire 2 affiche une valeur temporelle écasting erronée. Des suggestions pour que mon code fonctionne? Merci!

Passer l’heure de début à la deuxième forme

 private void StartButton_Click(object sender, EventArgs e) { Form2 frm = new Form2(DateTime.Now); frm.Show(); this.Hide(); } 

Et puis l’utiliser

 public partial class Form2 : Form { private DateTime startTime; public Form2(DateTime startTime) { InitializeComponent(); this.startTime = startTime; } private void StopButton_Click(object sender, EventArgs e) { endTime = DateTime.Now; ts_timeElapsed = (endTime - startTime); s_timeElapsed = GetElapsedTimeSsortingng(); ElapsedLabel.Text = "Time Elapsed: " + s_timeElapsed; Form3 frm = new Form3(); frm.Show(); } } 

Selon que ces formulaires existent dans la même application, vous pouvez passer une référence au premier formulaire dans la seconde. Et puis (parce que l’object starttime1 DateTime est public, vous pouvez y accéder à partir du second formulaire.

Il serait plus propre et plus facile à gérer si les données étaient stockées dans un endroit accessible depuis les deux formulaires. Par exemple une classe statique. (Vous pouvez également utiliser une firebase database ou un fichier texte)

 public static TempStore { public DateTime StartTime { get; set; } } 

Définissez StartTime partir de From1 et From1 la différence dans Form2

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void StartButton_Click(object sender, EventArgs e) { TempStore.StartTime = DateTime.Now; // ... } } 

Formulaire 2:

 public partial class RoadSign1Meaning : Form { public RoadSign1Meaning() { InitializeComponent(); } private void StopButton_Click(object sender, EventArgs e) { TimeSpan span = DateTime.Now - TempStore.StartTime; // ... } } 

Ainsi, si vous décidez de transmettre davantage de données vers et à partir de formulaires, vous pouvez étendre cette classe static .

Il existe plusieurs solutions, mais cela dépend également de la complexité de ce que vous souhaitez réaliser. Le plus simple avec moins de modifications dans votre code serait de déclarer un constructeur sur votre deuxième formulaire qui accepte un paramètre de type DateTime et de le transférer dans startTime2 à partir de Form1 lors de la création de Form2 exactement comme Form2 form2 = new Form2 (startTime2). Une méthode plus élégante consisterait à définir une interface avec une méthode GetElapsedTime () et à créer un béton qui prend en charge l’heure de début / fin et vous pouvez transmettre l’instance concrète à Form2 comme auparavant à partir de Form1.