由于刚学点 vb 现在试用vb 中的wpf 写个动态的日历,主要用到的开发工具是 vs 2010 中文版本
我这里主要有以下页面
Commen_Calendar 前台代码:
<Window x:Class="Commen_Calendar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Commen_Calendar" Height="410" Width="460">
<Grid Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="55*" />
<ColumnDefinition Width="383*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Background="AliceBlue" Grid.ColumnSpan="2">
<ComboBox x:Name="com_year" Width="70" VerticalAlignment="Center" Margin="10,0,0,0">
<ComboBoxItem Content="2011 年" Tag="2011"/>
<ComboBoxItem Content="2012 年" Tag="2012"/>
<ComboBoxItem Content="2013 年" Tag="2013"/>
</ComboBox>
<ComboBox x:Name="com_month" Width="50" VerticalAlignment="Center" Margin="10,0,0,0">
<ComboBoxItem Content="1月" Tag="1"/>
<ComboBoxItem Content="2月" Tag="2"/>
<ComboBoxItem Content="3月" Tag="3"/>
<ComboBoxItem Content="4月" Tag="4"/>
<ComboBoxItem Content="5月" Tag="5"/>
<ComboBoxItem Content="6月" Tag="6"/>
<ComboBoxItem Content="7月" Tag="7"/>
<ComboBoxItem Content="8月" Tag="8"/>
<ComboBoxItem Content="9月" Tag="9"/>
<ComboBoxItem Content="10月" Tag="10"/>
<ComboBoxItem Content="11月" Tag="11"/>
<ComboBoxItem Content="12月" Tag="12"/>
</ComboBox>
</StackPanel>
<Grid Grid.Row="1" Background="AliceBlue" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" x:Name="lb_sun" Content="日" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="1" x:Name="lb_mon" Content="一" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="2" x:Name="lb_tue" Content="二" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="3" x:Name="lb_wed" Content="三" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="4" x:Name="lb_thu" Content="四" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="5" x:Name="lb_fri" Content="五" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0,0,1,0"/>
<Label Grid.Column="6" x:Name="lb_sat" Content="六" FontSize="13" Margin="2,0,0,2" Padding="0,1,0,0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<StackPanel x:Name="MonthViewGrid" Grid.Row="2" Grid.ColumnSpan="2" />
</Grid>
</Window>
Commen_Calendar 后台代码:
Dim DoW As New Day_of_Week
Dim _year As Integer = Date.Now.Year
Dim _month As Integer = Date.Now.Month
Dim CI_list As New List(Of Calendar_Item)()
Public Sub Commen_Calendar()
'Dim cy As New ComboBoxItem
'cy.Tag = 2008
'cy.Content = "2008 年"
'com_year.Text = "sdsdlfjsldfj"
'TimeInitial()
End Sub
'时间初起化
Public Sub TimeInitial()
com_year.Items.Clear()
com_month.Items.Clear()
Dim i As Integer, j As Integer
For i = -1 To 1 'Step +1
Dim ci = New ComboBoxItem
ci.Tag = Date.Now.AddYears(i)
ci.Content = Date.Now.AddYears(i) & "年"
com_year.Items.Add(ci)
If i = 0 Then
com_year.SelectedItem = ci
End If
Next
For j = 1 To 12 'Step +1
Dim cb = New ComboBoxItem
cb.Tag = j
cb.Content = j.ToString & "月"
com_month.Items.Add(cb)
Next
End Sub
'年份下拉框动作
Private Sub com_year_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles com_year.SelectionChanged
If Len(com_year.SelectedItem.ToString) > 0 Then
Return
End If
com_month_SelectionChanged(Me, Nothing)
End Sub
'月份下拉框动作
Private Sub com_month_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles com_month.SelectionChanged
If Len(com_month.SelectedItem.ToString) > 0 Then
Dim year As ComboBoxItem = com_year.SelectedItem
_year = Convert.ToInt32(year.Tag.ToString)
Dim month As ComboBoxItem = com_month.SelectedItem
_month = Convert.ToInt32(month.Tag.ToString)
CalendarInitial()
End If
End Sub
'日历的生成
Public Sub CalendarInitial()
MonthViewGrid.Children.Clear()
CI_list.Clear()
' Dim v_month =_year+"/"+(_month<10 ? "0" + _month.ToString:_month.ToString )
Dim v_month As String = _year & "/" & (If(_month < 10, "0" & _month.ToString(), _month.ToString()))
For i = 1 To Date.DaysInMonth(_year, _month) Step +1
Dim _off As Boolean = False '换行标识
Dim ci As New Calendar_Item
ci.lb_date.Content = i.ToString
'ci.lb_app.Content=
Dim _dow = Date.Parse(_year & "/" & _month & "/" & i).DayOfWeek
Select Case _dow
Case DayOfWeek.Sunday '如果是周六日,默認安排休假
Grid.SetColumn(ci, Grid.GetColumn(lb_sun))
ci.lb_date.Foreground = Brushes.Red
'ci.lb_app.Content = If(result.Count = 0, "H", result(i - 1).MONTH_VCT)
'如果該月沒有假日設定,給默認假日,如果有,按照設定生成日曆
ci.lb_date.Tag = "Sunday"
Exit Select
Case DayOfWeek.Monday
Grid.SetColumn(ci, Grid.GetColumn(lb_mon))
ci.lb_date.Tag = "Monday"
Exit Select
Case DayOfWeek.Tuesday
Grid.SetColumn(ci, Grid.GetColumn(lb_tue))
ci.lb_date.Tag = "Tuesday"
Exit Select
Case DayOfWeek.Wednesday
Grid.SetColumn(ci, Grid.GetColumn(lb_wed))
ci.lb_date.Tag = "Wednesday"
Exit Select
Case DayOfWeek.Thursday
Grid.SetColumn(ci, Grid.GetColumn(lb_thu))
ci.lb_date.Tag = "Thursday"
Exit Select
Case DayOfWeek.Friday
Grid.SetColumn(ci, Grid.GetColumn(lb_fri))
ci.lb_date.Tag = "Friday"
Exit Select
Case DayOfWeek.Saturday
Grid.SetColumn(ci, Grid.GetColumn(lb_sat))
ci.lb_date.Foreground = Brushes.Red
' ci.lb_app.Content = If(result.Count = 0, "H", result(i - 1).MONTH_VCT)
'如果該月沒有假日設定,給默認假日,如果有,按照設定生成日曆
ci.lb_date.Tag = "Saturday"
_off = True
Exit Select
End Select
DoW.WeekRowGrid.Children.Add(ci)
If _off Or i = Date.DaysInMonth(_year, _month) Then
MonthViewGrid.Children.Add(DoW)
DoW = New Day_of_Week
End If
CI_list.Add(ci) '.Add(ci)
Next
End Sub
End Class
然后将页面Commen_Calendar 设定为启动页面,运行即可。
得出的效果图如下
联系客服