年+月组合框VB​​

时间:2017-10-31 01:33:32

标签: vb.net combobox

现在我试图用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

我如何将它延伸到过去的一年和一月?

2 个答案:

答案 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