Загрузить элемент со списком на основе разницы во времени

#powershell

#powershell

Вопрос:

Ниже приведен мой графический интерфейс, в котором я выбираю дату (от и до) и интервал времени.

введите описание изображения здесь

прямо сейчас поле со списком Интервал выборки имеет значения по умолчанию, как показано ниже

 $cmb_InterVal                    = New-Object system.Windows.Forms.ComboBox
$cmb_InterVal.width              = 212
$cmb_InterVal.height             = 20
$cmb_InterVal.location           = New-Object System.Drawing.Point(139,178)
$cmb_InterVal.Font               = New-Object System.Drawing.Font('Microsoft Sans Serif',8)
                                   $cmb_InterVal.Items.add("5 min")
                                   $cmb_InterVal.Items.add("15 min")
                                   $cmb_InterVal.Items.add("30 min")
                                   $cmb_InterVal.Items.add("60 min")
                                   $cmb_InterVal.Items.add("1 day")
                                   $cmb_InterVal.Items.add("15 days")
                                   $cmb_InterVal.Items.add("30 days")
                                   $cmb_InterVal.Items.add("365 days")
  

но теперь на основе времени от и до разницы необходимо отображать значения в поле со списком.

например, если разница от и до даты составляет 30 дней или более, поле combox должно загружать все остальные значения, кроме 5 минут и 15 минут, как показано ниже

 
                                   $cmb_InterVal.Items.add("30 min")
                                   $cmb_InterVal.Items.add("60 min")
                                   $cmb_InterVal.Items.add("1 day")
                                   $cmb_InterVal.Items.add("15 days")
                                   $cmb_InterVal.Items.add("30 days")
                                   $cmb_InterVal.Items.add("365 days")
  

если время меньше 30, то все значения должны быть видны.

Нужна некоторая идея о том, как это сделать.

Комментарии:

1. Вы недостаточно показываете, что вы делаете (показываете код для from), или предоставляете четкое объяснение вашего варианта использования, ну, по крайней мере, для меня, но я стар и здоров, вы знаете. ;-} Тем не менее, если я догадываюсь об этом, вы не устанавливаете интервал времени, чтобы получить массив, соответствующий этой спецификации, который должен быть в раскрывающемся списке интервал.

Ответ №1:

Из небольшого фрагмента кода, который вы нам показываете, невозможно определить, как вы назвали различные элементы управления, поэтому в приведенном ниже коде я придумываю для них свои собственные имена:

В обработчике события щелчка Generate кнопки вам необходимо создать реальные объекты DateTime из текстовых свойств элементов управления. Для меня они выглядят как элемент управления DateTimePicker для части даты и элемент управления NumericUpDown для части времени.

Если у вас есть эти объекты DateTime, вы можете просто вычесть один из другого, чтобы получить объект TimeSpan.

Попробуйте:

 $generateButton.Add_Click({
    # get the date from the TimeFrom DateTimePicker control and the time from the UpDown control
    $dateFrom = [datetime]::ParseExact(('{0} {1}' -f $datePickerFrom.Text, $timeUpDownFrom.Text), 'dd-MM-yyyy HH:mm', $null)
    # same for the TimeTo
    $dateTo = [datetime]::ParseExact(('{0} {1}' -f $datePickerTo.Text, $timeUpDownTo.Text), 'dd-MM-yyyy HH:mm', $null)
    # get the total number of minutes between the two dates
    $minutes = [math]::Abs(($dateTo - $dateFrom).TotalMinutes)

    $cmb_InterVal.Items.Clear()
    if ($minutes -lt 30) {
        $cmb_InterVal.Items.Add("5 min")
        $cmb_InterVal.Items.Add("15 min")
    }
    # add the rest of the items to the combobox
    '30 min', '60 min', '1 day', '15 days', '30 days', '365 days' | ForEach-Object {
        $cmb_InterVal.Items.Add($_)
    }
})
  

Комментарии:

1. Урок здесь заключается в том, что чем больше кода и информации о проблеме вы предоставляете, тем легче нам помочь.

2. @Theo: Спасибо за ваш ответ. Как вы упомянули, код, написанный при нажатии кнопки. мне нужно сделать это при изменении даты. поэтому, как только я выберу даты, код получит разницу между ними и на основе этого будут отображаться значения. какое событие использовать для этого в datetimepicker.

3. @EmptyCoder Хорошо, поэтому в этом случае поместите код внутри SelectedDateChanged события выбора даты вместо кнопки Click