现在我试图用VB在1个组合框中显示年份+月份。我设法将它结合起来,但我需要从当前年份开始显示它。一个月,直到过去的2年前。预期的输出应该像这样显示。
组合框上的预期输出显示:
2017/10
2017/9
2017/8
2017/7
2017/6
2017/5
2017/4
2017/3
2017/2
2017/1
2016/12
2016/11
2016/10
2016/9
2016/8
2016/7
2016/6
2016/5
2016/4
2016/3
2016/2
2016/1
这是我当前的代码和输出。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ComboBox1.Text = Date.Now.Year & "/" & Date.Now.Month
For i As Integer = 0 To 9
ComboBox1.Items.Add(Date.Now.Year & "/" & Date.Now.Month - i)
Next
End Sub
输出:
2017/10
2017/9
2017/8
2017/7
2017/6
2017/5
2017/4
2017/3
2017/2
2017/1
我如何将它延伸到过去的一年和一月?
答案 0 :(得分:2)
要获得包含当前和前几个月的年份和月份的Strings
数组,您可以执行以下操作:
Dim arr = Enumerable.Range(0, count + 1).
Select(Function(n) Date.Today.AddMonths(-n).ToString("yyyy/M")).
ToArray()
其中count
是您想要返回的月数。然后,您可以将该数组分配给DataSource
的{{1}}。
使用更像原始代码的代码:
ComboBox
请注意,我们在这里使用的是For i = 0 To count
ComboBox1.Items.Add(Date.Today.AddMonths(-i).ToString("yyyy/M"))
Next
而不是count
,因为这是一个上限,以前它是一个实际计数,它将是1更大。
答案 1 :(得分:0)
不是假装是一个答案,而只是@ jmcilhenney的答案的补充。
如果您想要使用所选月份的信息,您可以使用数据绑定和月份创建的类。
Public Class Month
Public ReadOnly Property Year As Integer
Public ReadOnly Property Month As Integer
Public ReadOnly Property Formatted As String
Public Sub New(date As Date)
Year = date.Year
Month = date.Month
Formatted = date.ToString("yyyy/M")
End Sub
End Class
创建月份集合并将其设置为ComboBox.DataSource
Dim today = Date.Today
Dim months = Enumerable.Range(0, count + 1).
.Select(Function(i) new Month(today.AddMonths(-i))
.ToArray()
ComboBox1.DisplayMember = "Formatted" ' Name of property to be used as Text for ComboBox
ComboBox1.DataSource = months
然后当用户选择月份时
Private Sub ComboBox_SelectionChangeCommitted(sender As Object, e As EventArgs)
Dim comboBox = DirectCast(sender, ComboBox)
Dim selectedMonth = DirectCast(comboBox.SelectedItem, Month)
'Now you have access to year and month properties
selectedMonth.Year
selectedMonth.Month
End Sub