#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