打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用 VB(WPF) 做了一个动态的日历

由于刚学点 vb 现在试用vb 中的wpf 写个动态的日历,主要用到的开发工具是 vs 2010 中文版本

我这里主要有以下页面 

Calendar_Item 是 UserControl 主要用来画日历单个格子的样式。
Day_of_Week 也是UserControl 是一个空的页面,里面什么也没有,主要为了Commen_Calendar 页面使用。
Commen_Calendar 是窗体主要用于动态显示日历。
Application主要用来设定启动页面。
现在分别来看一下各个页面的代码。
 Calendar_Item 前台代码为:
<UserControl x:Class="Calendar_Item"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="100" d:DesignWidth="100" BorderThickness="0.5,0.5,1.5,1.5" Width="60" Height="60" BorderBrush="LightSlateGray" >
    <UserControl.Resources>
        <ResourceDictionary>
            <LinearGradientBrush x:Key="BlueGradientBrush" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFFFFFFF" Offset="0"/>
                <GradientStop Color="#FFC4DDFF" Offset="0.987"/>
                <GradientStop Color="#FFDEECFF" Offset="0.535"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="OrangeGradientBrush" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFFFFFDC" Offset="0"/>
                <GradientStop Color="#FFFADC96" Offset="0.525"/>
                <GradientStop Color="#FFF9D07D" Offset="0.732"/>
                <GradientStop Color="#FFF7BE57" Offset="1"/>
            </LinearGradientBrush>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"/>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Border x:Name="DayLabelRowBorder" CornerRadius="2" Grid.Row="0" BorderBrush="{x:Null}"
                Background="{DynamicResource BlueGradientBrush}">
            <Label x:Name="lb_date" Content="1" FontWeight="Bold" FontFamily="Arial" FontSize="16"/>
        </Border>
        <StackPanel Grid.Row="1" x:Name="DayAppointmentsStack" HorizontalAlignment="Stretch" Background="White"
                    VerticalAlignment="Stretch">
         <Label x:Name="lb_app" Content="Label" HorizontalAlignment="Left"/>
        </StackPanel>
    </Grid>
</UserControl>
图片效果:
 
后台代码:
Public Class Calendar_Item
    Public Sub Calendar_Item()
        InitializeComponent()
        'lb_app.ismou()
    End Sub
End Class

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  后台代码:

 

Public Class 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 设定为启动页面,运行即可。

得出的效果图如下

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Win 8中WPF listview与listBox的Drag、Drop操作
如何使用WPF做一个变频器调试软件
WPF控件操作之改变父控件之TabControl示例
WPF调用线程
UG二次开发【快速出车间文档】
VB导出EXCEL的代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服