2017-10-31 27 views
0

今は、VBを使用して、1つのコンボボックスに年+月を表示しようとしています。私はそれを組み合わせることができますが、私は現在の年&月からそれを過去2年前まで表示する必要があります。期待される出力は、このように表示する必要があります。コンボボックス上年+月コンボボックスVB

予想される出力表示:

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

を選択したときに、私はあなたの代わりに' DateTimePicker'を使用することをお勧めヶ月のコレクションを作成し、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 

に設定'' yyyy/MM ''に設定します。 – Dai

+0

私のアプリケーションにはdateTimePickerを使用できません。それは私の要件に適していません。 – Safwan

答えて

2

あなたがこれを行うことができ、現在および以前の数ヶ月のための年と月を含むStringsの配列を取得するには:

countは、あなたが戻って行きたい月数です
Dim arr = Enumerable.Range(0, count + 1). 
        Select(Function(n) Date.Today.AddMonths(-n).ToString("yyyy/M")). 
        ToArray() 

を。その配列をComboBoxDataSourceに割り当てることができます。これは以前にそれが1大きくなります実際のカウント、あった場所上限であるため、ここでは、我々はむしろcount + 1よりcountを使用することを

For i = 0 To count 
    ComboBox1.Items.Add(Date.Today.AddMonths(-i).ToString("yyyy/M")) 
Next 

注:だろうと、より多くのあなたのオリジナルのようなコードを使用して

+0

ご協力ありがとうございます。私はすでにそれを得た。 – Safwan

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 

`CustomFormat`プロパティで、ユーザーは月

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