Рейтинг:
17
Maciej Los
Основываясь на предложении @RickZeeland и @MadMyche, я создал функцию, которая возвращает массив целых чисел, соответствующих неделям для конкретного года и месяца.
Public Function GetWeeksNumbers(yr As Integer, mth As Integer) As Integer()
Dim weeks As Dictionary(Of Integer, DateTime) = New Dictionary(Of Integer, DateTime)
Dim curr As System.Globalization.CultureInfo = System.Globalization.CultureInfo.CurrentCulture
Dim dtStart As DateTime = New DateTime(yr, mth, 1)
Dim dtEnd As DateTime = dtStart.AddMonths(1).AddDays(-1)
Dim dt As DateTime = dtStart
Do While dt <= dtEnd
Dim i As Integer = curr.Calendar.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
If Not weeks.ContainsKey(i) Then
weeks.Add(i, dt)
End If
dt = dt.AddDays(1)
Loop
Return weeks.Select(Function(kvp) kvp.Key).ToArray()
End Function
Использование:Dim weeks As Integer() = GetWeeksNumbers(2019, 9) 'replace constant values with values comes from corresponding comboboxes
Dim i As Integer = 0
With Me.ComboBoxWeeks.Items
.Clear()
For i = LBound(weeks) To UBound(weeks)
.Add(i)
Next
End With
Member 14587396
Мацей Лос, спасибо за вашу помощь до сих пор, но я получаю ошибку на
"Dim weeks As Integer () = GetWeeksNumbers( 2019 , 9 )"
Ошибка заключается в следующем:" значение типа 'Integer' не может быть преобразовано в '1-мерный массив целых чисел'
Я заменил его значениями из моего combobox, но все еще имел эту ошибку.
Спасибо за дальнейшую помощь!
Maciej Los
Мое лучшее предположение таково: а GetWeeksNumbers()
объявление метода неверно. Вы, вероятно, определяете это так:
Public Function GetWeeksNumbers(yr As Integer, mth As Integer) As Integer
вместо
Public Function GetWeeksNumbers(yr As Integer, mth As Integer) As Integer()
Вы видите разницу?
Member 14587396
Да, теперь это исправлено, но значение, возвращаемое в функции, теперь дает ту же ошибку.
Я вернул "недели" в функцию.
Разве я не прав в этом?
Maciej Los
Нет. Он возвращает массив целых чисел. "недели" - это имя переменной, которая используется для хранения этого массива.
Member 14587396
Я попытался запустить программу без возврата значения и она показывает предупреждение но затем еще одна ошибка в этой строке,
Dim dtStart As DateTime = New DateTime(yr, mth, 1 ).
Ошибка заключается в том, что "параметры Year, Month и Day описывают непредставимую дату-время".
Этого я тоже не понимаю.
Maciej Los
?!?
Где вы используете этот код ОД? Внутри функции или вне ее?
Member 14587396
внутри функции GetWeeksNumber
Maciej Los
Это тоже должно сработать, потому что yr
и mth
передаются в качестве параметра функции, если только вы не передадите null (nothing). Используйте отладчик, чтобы выяснить это.
Member 14587396
Пожалуйста, извините, что я задаю слишком много вопросов.
Какое значение я должен вернуть в функции GetWeeksNumber?
Maciej Los
Массив целых чисел.
Member 14587396
Пожалуйста, не могли бы вы показать, как это делается в отношении функции GetWeeksNumber.
Я знаю, что тебе сейчас очень скучно, но это то, что может вызвать полный новичок вроде меня.
Спасибо Вам за помощь до сих пор.
Я начинаю понимать некоторые вещи лучше.
Maciej Los
Пожалуйста, внимательно прочтите мой ответ. Я уже показывал тебе, как им пользоваться. Все что вам нужно сделать это двигаться [Использование] участие в cbxMonth_SelectedIndexChange()
процедура. Затем вы должны пройти своды бомбобоксов: cbxYear
и cbxMonth
к этой строке:
Dim weeks As Integer() = GetWeeksNumbers(cbxYear.SelectedValue, cbxMonth.SelectedValue)
Но мне нужно это сделать
предупредить вас это SelectedValue может вернуться
null (nothing)
Так что вы должны проверить, если
SelectedValue
конечно, combobox не является нулевым! Для получения более подробной информации, пожалуйста, смотрите:
ComboBox SelectedItem, SelectedValue, SelectedWhat??? – jaredpar в блог[
^]
Member 14587396
Большое вам спасибо, сэр.
Теперь я все решил.
Maciej Los
Всегда пожалуйста.
Рейтинг:
0
MadMyche
Возможно, вы захотите использовать Calenda
класс который - Представляет время в делениях, таких как недели, месяцы и годы.", а также GetWeekOfYear
метод, который поможет вам также - просто дайте ему дату, о которой идет речь, и Валлах у вас есть номер недели
Ссылка:
Календарный Класс (Система.Глобализация) | Microsoft Docs[^]
Member 14587396
пожалуйста, не могли бы вы сделать для меня иллюстрацию в коде.
Я проверил ссылку, но не могу понять, что делать
MadMyche
Логика, которую вы используете, будет зависеть от вас, и это не зависит от меня, чтобы исправить ее; и я действительно не знаю, какова общая картина вашего приложения, чтобы определить, является ли этот курс действий правильным.
Тем не менее, если это было мое....
1. Лет будет статический список, а также месяцев
2. Как только все вышеперечисленное будет выбрано, я получу номер недели, основанный на 1-м дне выбранного месяца