Winforms & TimeSpan - Какой элемент управления работает лучше всего? - PullRequest
3 голосов
/ 19 февраля 2009

Я строю форму с winforms - и должен добавить представление и редактируемое значение промежутка времени. Какие элементы управления лучше всего подходят для этого?

Обычный элемент управления редактирования показывает значение правильно -> но это не очень хорошо для изменения значений

обычное средство выбора даты не работает

Маскируемый элемент редактирования не имеет стандартной маски для этого

У кого-нибудь есть хорошая идея для контроля для этой задачи?

Ответы [ 7 ]

5 голосов
/ 09 апреля 2010

Используйте TimeSpan Helper , который включает в себя простой элемент управления (который не был задокументирован слишком хорошо, когда я его использовал).

5 голосов
/ 19 февраля 2009

Я построил тот, который имел TextBox в сочетании с ComboBox для выбора единиц измерения. Пользовательский элемент управления имеет настройки диапазона (значение + -) и (единицы времени). Исходя из выбранных единиц, текстовое поле было проверено на ранжирование - например, 1-7 дней могут быть действительными, но если бы единицы были минутами, 1-60 минут могли бы быть лучше.

Я также сделал комбинации из двух ComboBox и NumericUpDown.

Если вам нужны промежутки времени, например, 3 дня, 4 часа, 6 минут, я бы, вероятно, выбрал пользовательский элемент управления с замаскированным текстовым полем и диапазон проверки компонентов.

Как правило, я выбираю первый, хотя.

Только мои два цента.

3 голосов
/ 19 февраля 2009

Используйте обычное текстовое поле в сочетании с элементом управления поставщиком ошибок, который проверяет значение с помощью TimeSpan.TryParse () и всплывающей подсказкой, указывающей, какие данные вы ожидаете.

Если вы хотите, вы также можете объединить все это в единый пользовательский элемент управления.

2 голосов
/ 10 января 2014

Для другого проекта мне тоже пришлось редактировать промежуток времени.

Я наконец-то использовал 3 числовых элемента управления вверх / вниз: первый контролирует общее количество часов, второй - минуты, а третий - секунды.

//Setting the values
durationHours.Value = (Decimal)Math.Floor (data.TotalHours);
durationMin.Value = data.Minutes;
durationSeconds.Value = data.Seconds;

//Getting the values
data = new TimeSpan((int)durationHours.Value, (int)durationMin.Value, (int)durationSeconds.Value);
1 голос
/ 05 июля 2012

Также попробуйте этот расширенный TimeSpanPicker

1 голос
/ 29 июля 2009

Если вы ищете какой-то рабочий код, посмотрите ссылку ниже.

В этом блоге представлен исходный код пользовательского элемента управления WPF для выбора промежутка времени.

0 голосов
/ 12 ноября 2013

Если вам не нужно разрешать более 24 часов и вы не хотите указывать миллисекунды, я думаю, что средство выбора DateTime работает лучше всего, особенно если вы создаете пользовательский элемент управления, чтобы сделать его средством выбора TimeSpan. *

Приятно то, что вы можете обновить часы / минуты / секунды. Он автоматически запрещает вам устанавливать время более 60 минут / секунд. Недостаток: нет миллисекунд и не дольше, чем за сутки.

В студию разработчика добавлен новый пользовательский элемент управления: TimePicker. На пользовательском элементе управления установите палитру DateTime. Изменить свойства:

  • Формат: время; это означает, что вы видите только время (с секундами) до 24 часов
  • ShowUpDown: True: это означает, что вы не можете открыть календарь. Вы будете иметь подъем вниз для часов / минут / секунд.

Используется локализованный формат времени. Если вы хотите определенный формат времени, используйте пользовательский формат времени.

Реагирует на событие, проверенное для считывания значения как DateTime, и вычитания из полуночи в начале того же дня. Результатом будет TimeSpan. Вернуть это значение в Valug.Get. Value.Set: добавьте DateTime сегодняшней полуночи к TimeSpan, чтобы установить.

Если вам нужно более 24 часов или вы хотите добавить миллисекунды, добавьте текстовое поле и используйте validating и TryParse. Это даже позволит пользователям использовать тики вместо уведомления о времени. Если не подтверждено, используйте подсказку для отображения ошибки.

...