#vb.net #winforms
Вопрос:
Я пытаюсь сделать простой калькулятор «общего количества отработанных часов».
У меня есть текстовое поле, в котором я хочу написать, скажем 1.30
, 1 час 30 минут. У меня есть другое текстовое поле , куда я бы поместил то же 1.30
самое, а затем я хочу добавить их в ярлык и показать 3 часа.
Однако я не могу найти правильный код для преобразования чисел в часы, и вместо этого он показывает 2.6. Как я могу заставить его показывать 3 часа?
Вот мой код
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Label1.Text = Val(TextBox1.Text) Val(TextBox2.Text)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Text = My.Settings.SaveTextBox()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
My.Settings.SaveTextBox = TextBox1.Text()
End Sub
End Class
Комментарии:
1. Вы уверены, что хотите принять
1.30 hours
участие в качестве вклада? Я бы подумал1:30
или1.5
лучше представлял то время. Если строкаhours
должна быть во входных данных, то вы также хотите обработатьminutes
90 minutes
ее ?2. В вашем мире 2,6 часа = 3 часа. Поэтому, где бы вы ни проводили это преобразование, вам нужно преобразовать .6 в 1. Вы упускаете это
3.
1.3
Равно ли1.30
это или1.03
?
Ответ №1:
Использование a NumericUpDown
избавит вас от необходимости проверять, действительно ли пользователь ввел номер в текстовое поле. Установите NumericUpDownMinutes
максимальное значение 59 в окне свойств. PadLeft
Добавляет начальный ноль к однозначным минутам.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Hours = NumericUpDownHours.Value.ToString
Dim Minutes = NumericUpDownMinutes.Value.ToString
lblTotal.Text = $"{Hours}.{Minutes.PadLeft(2, "0"c)}"
End Sub
Чтобы получить округленные часы
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim Hours = NumericUpDownHours.Value
Dim Minutes = NumericUpDownMinutes.Value
Dim RoundedHours = CInt(Hours Minutes / 60)
lblRoundedTotal.Text = RoundedHours.ToString
End Sub
Комментарии:
1. Тх, теперь это работает.