2015-12-11 32 views
1

美好的一天。任何人都可以幫助我解決這個問題。我有兩個組合框1)爲2個月)的一年。我在這裏有一個代碼數月。我希望它能像循環一樣簡單,就像在年份組合框中從2000年到2015年一樣。任何解決方案,建議......?獲取組合框中月份值的簡短或簡單解決方案

' I've tried this. but it shows 01-12 numbers in a combobox not January to December 
    For i As Integer = 1 To Date.Now.Month 
     ComboBox1.Items.Add(i) 
    Next 

對於代碼的其餘部分......

Public Class Form1 
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

    ValueComboxformonth() 

    For i As Integer = 2000 To Date.Now.Year 
     ComboBox1.Items.Add(i) 
    Next 
    ' I want my month combo box have a solution like the above for loop 
    ' I've tried this. but it shows 01-12 numbers in a combobox not January to December 
    'For i As Integer = 1 To Date.Now.Month 
    ' ComboBox1.Items.Add(i) 
    'Next 

End Sub 
Private Sub ValueComboxformonth() 
    ComboBox1.Items.Add(New forMonthlist("January", "01")) 
    ComboBox1.Items.Add(New forMonthlist("February", "02")) 
    ComboBox1.Items.Add(New forMonthlist("March", "03")) 
    ComboBox1.Items.Add(New forMonthlist("April", "04")) 
    ComboBox1.Items.Add(New forMonthlist("May", "05")) 
    ComboBox1.Items.Add(New forMonthlist("June", "06")) 
    ComboBox1.Items.Add(New forMonthlist("July", "07")) 
    ComboBox1.Items.Add(New forMonthlist("August", "08")) 
    ComboBox1.Items.Add(New forMonthlist("September", "09")) 
    ComboBox1.Items.Add(New forMonthlist("October", "10")) 
    ComboBox1.Items.Add(New forMonthlist("November", "11")) 
    ComboBox1.Items.Add(New forMonthlist("December", "12")) 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim nMonthStart As forMonthlist = CType(ComboBox1.SelectedItem, forMonthlist) 
End Sub 
    End Class 

對於forMonthlist ....

Public Class forMonthlist 
Private mText As String 
Private mValue As String 

Public Sub New(ByVal pText As String, ByVal pValue As String) 
    mText = pText 
    mValue = pValue 
End Sub 

Public ReadOnly Property Text() As String 
    Get 
     Return mText 
    End Get 
End Property 

Public ReadOnly Property Value() As String 
    Get 
     Return mValue 
    End Get 
End Property 

Public Overrides Function ToString() As String 
    Return mText 
End Function 
End Class 

感謝

回答

2

您可以使用DateTimeFomatInfo.GetMonthName

Dim formatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo 
For i As Integer = 1 To Date.Today.Month 
    Dim monthName = formatInfo.GetMonthName(i) 
    ComboBox1.Items.Add(monthName) 
Next 

如果你有一個月的時間,名稱和要它的整數值,您可以在解析到一個DateTime

Dim month As Int32 = Date.ParseExact("July", "MMMM", CultureInfo.CurrentCulture).Month 

如果你不想本地化的名稱,你可以使用CultureInfo.InvariantCulture

+0

如果我選擇7月份的月份,7月份的價值是07。謝謝 – jLaw

+0

@ Tim Schmelter。對不起,我沒有在問題中指定它。 – jLaw

+0

@ Tim Schmelter。這行得通。但它導致7不是07.昏暗的月份因爲Int32 = Date.ParseExact(ComboBox1.SelectedItem,「MMMM」,CultureInfo.CurrentCulture)。月份 – jLaw

1

您也可以使用DateTimeFormatInfo.MonthNames找到月份名稱爲一種文化的選擇:

ComboBox1.DataSource = System.Globalization.CultureInfo.CurrentCulture _ 
          .DateTimeFormat.MonthNames() _ 
          .Where(Function(x) Not String.IsNullOrEmpty(x)) _ 
          .Select(Function(x, i) _ 
           New With {.Name = x, .Value = (i + 1).ToString("D2")}) _ 
          .ToList() 
Me.ComboBox1.DisplayMember = "Name" 
Me.ComboBox1.ValueMember = "Value" 

要發現你可以簡單地使用選擇一個月的價值SelectedValue

MessageBox.Show(ComboBox1.SelectedValue.ToString()) 
'It shows 07 for example for July 

注意

  • 一些文化有13個月,所以DateTimeFormat.MonthNames返回一個13個月的數組。對於12個月的日曆,數組的第13個元素是空字符串,所以我使用了Not String.IsNullOrEmpty(x)。這樣,如果日曆有12個月,我們將顯示12個月,如果日曆有13個月,則顯示13個月。
+0

這是一樣的https://stackoverflow.com/questions/34207453/vb-net-combo-box-always-select-the-first-value/34207737#comment56160509_34207737,因爲我試過了,它工作。但我希望我的代碼能夠像循環一樣簡單。這可能嗎。?或不?謝謝。感謝您的幫助 – jLaw

+0

不幸的是,我不明白你的意思是「讓它像循環一樣簡單」。你也可以簡單地使用for循環,但這種方法更簡單,代碼更少。另外,由於它使用了顯示成員和值成員,因此可以簡單地在數據綁定中使用它。 –

+0

@ Reza Aghaei。感謝你們對我的幫助。你的代碼對我來說很新。但它運行。我只是想像@Tim所做的那樣簡單。再次。謝謝。 – jLaw

相關問題