2016-08-25 6 views
1

Ich möchte einen Code schreiben, liest eine Zeit, die der Benutzer schrieb in Textbox1, sagen wir 09:00 (hh: mm), speichern Sie es in eine Variable, dann nimmt diese Variable und fügt 08:40 zu und Ausgaben dann das Ergebnis 17:40 in textbox2.Wie arbeite ich mit Double in Textbox?

Das Problem ist, wenn es doppelt funktioniert, funktioniert es gut, aber ich muss das hh: mm verwenden - Format, ich weiß, einige Sprachen haben die Option, eine Variable als Zeit zu deklarieren, aber es scheint wie C# nicht tut dies . Also, was ist die Lösung? das ist meine aktuellen Code

void CmdWriteClick(object sender, EventArgs e) 
    { 
     string varstr = textbox_1.Text; 
     double muss = 8.40; 
     double vardb = Convert.ToDouble(varstr); 
     double end = vardb + muss; 
     textbox_2.Text = end.ToString(); 
    } 

Dies würde natürlich Output mich doppelt Zahlen. Wenn also varstr 08.30 ist, würde es 16,7 ausgeben, wenn ich es ausgeben müsste 17:10. Jede Hilfe ist willkommen

danke euch

Antwort

2

Sie sollten dafür keinen TextBox verwenden. Sie haben ein spezielles Steuerelement, um sich um Daten und Uhrzeiten zu kümmern: DateTimePicker.

Fügen Sie einen von diesen zu Ihrem Formular hinzu. Wenn Sie nur der Benutzer wünschen, die Zeit zu ändern, Datum Änderungen disallowing, können Sie wie folgt vorgehen:

public myForm() 
{ 
    InitializeComponent(); 
    .... 
    myDateTimePicker.Format = DateTimePickerFormat.Custom; 
    myDateTimePicker.CustomFormat = "HH:mm"; //Shows only hours and minutes in 24h format 
    myDateTimePicker.Value = DateTime.Now.Date; //sets the time to today at 0:00 
    myDateTimePicker.MinDate = DateTime.Now.Date; 
    myDateTimePicker.MaxDate = DateTime.Now.Date.Add(new TimeSpan(23, 59, 59)); //User can't change date. 
} 

private DateTime newTime; 
private void myDateTimePicker_ValueChanged(object sender, EventArgs e) 
{ 
    newTime = myDateTimePicker.Value.AddHours(8.5); 
} 

Natürlich, wenn Sie die Benutzer wollen auch das Datum einzustellen, dann ändern Sie einfach die MinValue und MaxValue Einschränkungen in der Anforderungen (falls vorhanden) und wählen Sie eine der vordefinierten Formatoptionen anstelle von DateTimePickerFormat.Custom.

1

Try this:

dateValue.AddHours(8); 
dateValue.AddMinutes(30); 
0

Sie können Datetime verwenden, anstatt Doppel.

private void button1_Click(object sender, EventArgs e) 
    { 
     DateTime dateTime = DateTime.ParseExact(textBox1.Text, "HH:mm", System.Globalization.CultureInfo.CurrentCulture); 
     TimeSpan time = new TimeSpan(8,40,0); 
     DateTime outputTime = dateTime.Add(time); 
     textBox2.Text = outputTime.ToString("HH:mm"); 
    } 
0

Man könnte so etwas tun:

string input = textbox_1.Text; 
DateTime inputTime; 
if (DateTime.TryParseExact(input, "HH:mm", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out inputTime)) 
{ 
     DateTime outputTime=inputTime.AddHours(8).AddMinutes(40); 
     textbox_2.Text = outputTime.ToString("HH:mm"); 
} 

Grundsätzlich Sie die Eingabezeichenfolge zu einer DateTime Variable analysieren, fügen Sie die Zeit, die Sie brauchen, und dann in einen String zurück zu konvertieren, sie zu zeigen in Ihrem TextBox

0

Wenn Sie es wirklich mit double machen wollen, müssen Sie über die Umwandlung von Minuten zu ganzen Zahlen nachdenken. 8.4 wäre dann 60 * .4 = 24 Minuten.

Im übrigen kann der Textzeichenfolge Sie mit TimeSpan.Parse analysieren und Sie können eine benutzerdefinierte Funktion schreiben, die die Doppel zu einem Timespan analysieren würde und dann einfach die 2 zusammen hinzufügen, etwa so:

using System; 

namespace TimeParser { 
    class Program { 
     static TimeSpan GetTimeFromText(string text) { 
      if (string.IsNullOrWhiteSpace(text)) { 
       return TimeSpan.Zero; 
      } 
      return TimeSpan.Parse(text); 
     } 

     static TimeSpan GetTimeFromDouble(double value) { 
      if (value <= 0) { 
       return TimeSpan.Zero; 
      } 
      int hours = (int)Math.Floor(value); 
      int minutes = (int)((value - hours)*60); 
      return new TimeSpan(0, hours, minutes, 0); 
     } 

     static TimeSpan GetAddedTime(string input, double time) { 
      var textTime = GetTimeFromText(input); 
      return textTime.Add(GetTimeFromDouble(time)); 
     } 

     static void Main(string[] args) { 
      var totalTime = GetAddedTime("8:30", 8.67); 
      Console.WriteLine(totalTime); // 17.10 
     } 
    } 
}