Member 8365433 Ответов: 1

Поля со списком не будут вычисляться при выборе


Так что это вызывает у меня некоторые проблемы, у меня есть 2 comboxes, которые заполняются на форме загрузки с часами для времени начала и времени окончания рабочей смены, как только combo1 time и combo2 time выбраны разница во времени в часах должна отображаться в метке, но она позволяет мне выбрать, но отображает только часы как 00:00:00 может ли кто-нибудь увидеть, что я сделал неправильно, пожалуйста, это, вероятно, что-то настолько простое, что я больше не могу видеть, я все еще новичок vb, так что любой совет будет полезен, спасибо

Что я уже пробовал:

мой код до сих пор таков :

заполняйте комбо при загрузке
- Установите начальное значение времени
Тусклый старт как DateTime = DateTime.ParseExact("00:00", "чч:мм", ничего)
- Установите конечное значение времени
Тусклый [конец] Как DateTime = DateTime.ParseExact("23:59", "чч:мм", ничего)
- Установите интервал времени
Тусклый интервал в виде целого числа = 15
'Список для хранения значений интервалов
Dim lstTimeIntervals As New List(Of String)()
'Заполните список значениями интервала в 15 минут
Dim i As DateTime = start
В то время как i <= [конец]
Поле combobox1.Предметы.Добавить(i.ToString("HH:mm tt"))
ComboBox2.Items.Добавить(i.ToString("HH:mm tt"))
i = i.AddMinutes(интервал)
Конец Пока
Затем

Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) обрабатывает ComboBox2.SelectedIndexChanged

Тусклая продолжительность как новый временной интервал()
Dim MyVariable1 Как TimeSpan
Dim MyVariable2 Как TimeSpan

MyVariable2 = ComboBox2.SelectedValue()
MyVariable1 = Элемент Combobox1.SelectedValue()

длительность = MyVariable2.вычитание(MyVariable1)

Этикетка 3.Текст = длительность.Метод toString

Конец Подводной Лодки

1 Ответов

Рейтинг:
1

an0ther1

Во - первых, назовите свои элементы управления описательными именами, даже если это тестовое приложение, это займет немного больше времени, но всегда сэкономит вам время в долгосрочной перспективе.
Во-вторых, узнайте, как использовать отладчик, вы узнаете гораздо больше от отладки, чем почти все остальное, помогут следующие ссылки;
Основы Отладчика | Microsoft Docs[^]
Навигация по коду с помощью отладчика[^]
Что касается вашего вопроса, то вам поможет следующее;

' Use Date object instead of TimeSpan to get your values
Dim datStart as New Date
Dim datEnd as New Date
' Convert the values from the ComboBox
' NOTE: Selected Value will not be valid unless you set the Value member, hence use Text property
datStart = DateTime.ParseExact(ComboBox1.Text, "HH:mm tt", Nothing)
datEnd = DateTIme.ParseExact(ComboBox2.Text, "HH:mm tt", Nothing)
' A timespan is returned by arithmetic operations on DateTime objects
Dim tsDuration as New TimeSpan()
tsDuration = datEnd - datStart


Надеюсь, это поможет

с уважением


Member 8365433

Спасибо, что сделали свое дело, однако я остался с другой проблемой, если кто-то работает с 10 вечера до 8 утра shiftit говорит -14:00:00, когда он должен сказать 10:00:00 любые предложения

Спасибо

an0ther1

Ваш отладчик помог бы в этом, но причина заключается в следующем;
Когда вы используете ParseExact & pass только значение времени, компонент даты считается текущей датой.
Поэтому ваши значения DateTime будут такими (при условии, что код даты выполняется 1 марта 2018 года);
dateStart = 1 марта 2018 года 2200
dateEnd = 1 марта 2018 0800
Разница составляет -14 часов
Самый простой способ решить эту проблему-проверить, является ли dateEnd более ранним, чем dateStart, и если да, то добавить день в dateEnd.
Это может вызвать другие проблемы, но вы должны быть в состоянии решить их

с уважением