在DateTimePicker控件中更改周显示

J

在vb.net或C#应用程序的winforms环境中使用传统的DateTimePicker控件,我需要更改从正常的星期日到星期六到星期二到星期一显示星期的方式。我已经搜索了Google和Stack,却没有发现任何结果。创建自定义控件没有问题。我只是不知道从哪里开始。

吉米

您可以使用SendMessageMCM_SETFIRSTDAYOFWEEK消息发送到DateTimePicker的MonthCalendar(在文档中阅读与此消息有关的注释)。

您首先发送一条DTM_GETMONTHCAL消息以获取MonthCalendar控件的句柄。如图所示,您可以DropDown在DateTimePicker事件处理程序中发送此消息
如果句柄有效,则设置发送的第一天MCM_SETFIRSTDAYOFWEEK
lParam值确定MonthCalendar中显示的第一天:

0=星期一,1=周二依此类推。

如果要构建自定义控件(最好是IMO),则可以在此处找到一个预构建的控件:
如何将DateTimePicker下拉列表设置为仅选择Years或Months?

它显示了如何处理DateTimePicker及其MonthCalendar下拉菜单,以更改当前的View和类似的任务。

internal const int DTM_FIRST = 0x1000;
internal const int DTM_GETMONTHCAL = DTM_FIRST + 8;
internal const int MCM_FIRST = 0x1000;
internal const int MCM_SETFIRSTDAYOFWEEK = MCM_FIRST + 15;

internal enum MCWeekDay : int 
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

internal void MonthCalendarSetFirstDayOfWeek(IntPtr dtpHandle, MCWeekDay weekDay)
{
    IntPtr hWndCal = SendMessage(dtpHandle, DTM_GETMONTHCAL, 0, 0);
    if (hWndCal != IntPtr.Zero) {
        SendMessage(hWndCal, MCM_SETFIRSTDAYOFWEEK, 0, (int)weekDay);
    }
}

private void dateTimePicker1_DropDown(object sender, EventArgs e)
{
    MonthCalendarSetFirstDayOfWeek((sender as Control).Handle, MCWeekDay.Tuesday);
}

VB.Net版本

Imports System.Runtime.InteropServices

Friend Const DTM_FIRST As Integer = &H1000
Friend Const DTM_GETMONTHCAL As Integer = DTM_FIRST + 8
Friend Const MCM_FIRST As Integer = &H1000
Friend Const MCM_SETFIRSTDAYOFWEEK As Integer = MCM_FIRST + 15

Friend Enum MCWeekDay As Integer
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
End Enum

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Friend Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As IntPtr
End Function

Friend Sub MonthCalendarSetFirstDayOfWeek(dtpHandle As IntPtr, weekDay As MCWeekDay)
    Dim hWndCal As IntPtr = SendMessage(dtpHandle, DTM_GETMONTHCAL, 0, 0)
    If hWndCal <> IntPtr.Zero Then
        SendMessage(hWndCal, MCM_SETFIRSTDAYOFWEEK, 0, weekDay)
    End If
End Sub

Private Sub DateTimePicker1_DropDown(sender As Object, e As EventArgs) Handles DateTimePicker1.DropDown
    MonthCalendarSetFirstDayOfWeek(DirectCast(sender, Control).Handle, MCWeekDay.Tuesday)
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Bootstrap Datetimepicker中更改方向

来自分类Dev

WPF C#Databind:在C#中,突出显示另一个控件时更改控件颜色

来自分类Dev

WPF C#Databind:在C#中,突出显示另一个控件时更改控件颜色

来自分类Dev

如何在DateTimePicker控件中自定义日历?

来自分类Dev

在图像控件中显示位图

来自分类Dev

在AVPlayer中显示播放控件

来自分类Dev

在 SysLink 控件中显示 & 字符

来自分类Dev

如何更改Windows窗体中的DateTimePicker格式?

来自分类Dev

在datetimepicker中显示日期和时间

来自分类Dev

弹出模式中的Bootstrap Datetimepicker显示问题

来自分类Dev

在datetimepicker中显示日期和时间

来自分类Dev

日历未显示在Bootstrap datetimepicker中

来自分类Dev

在熊猫重新采样中更改周定义

来自分类Dev

根据一天中的时间显示内容(在一周的不同日期更改时间)

来自分类Dev

单击卡片控件将数据显示到表格控件中

来自分类Dev

在Inno Setup中更改ComboBox后在下一个屏幕上动态显示控件和内容?

来自分类Dev

在细分控件中更改按钮文本

来自分类Dev

Javafx监听面板中的控件更改

来自分类Dev

检测用户控件中DataContext的更改

来自分类Dev

在GridView编辑模板中更改控件的值

来自分类Dev

在WPF中更改窗口控件模板的内容

来自分类Dev

用户控件MVVM中的WPF更改视图

来自分类Dev

图片在WPF控件中未更改

来自分类Dev

检测用户控件中DataContext的更改

来自分类Dev

用户控件MVVM中的WPF更改视图

来自分类Dev

在WPF中全局更改控件属性

来自分类Dev

在MVC中更改控件和html的样式

来自分类Dev

Javafx监听面板中的控件更改

来自分类Dev

更改 datetimepicker 默认语言 [datetimepicker]

Related 相关文章

热门标签

归档