家好,我们今日继续讲解VBA代码解决方案的第100讲内容:使用DTP控件输入日期。我们在录入数据的时候经常会用到日期的录入,往往会很繁琐,有没有好的办法实现日期的录入呢?今日就给大家讲解这方面的知识。和大家分享VBA的知识已经很长的时间了,到这里已经是第三本书了。待有一定的机会会出书,让大家看到一个实实在在的VBA,今日的讲解用到的控件是DTP控件,是日期时间控件Microsoft Date and Time Picker Control 6.0,的简称。
在工作表中单击菜单"开发工具"→"插入"→"控件工具箱",选择"其他控件"中的DTP控件如下图所示,就可以在工作表中添加一个DTP控件。
在设计模式下双击DTP控件写入下面的代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Me.DTPicker21
If Target.Count = 1 And Target.Column = 2 And (Not Target.Row = 1) Or Target.MergeCells Then
.Visible = True
.Top = Selection.Top
.Left = Selection.Left
.Height = Selection.Height
.Width = Selection.Width
If Target.Cells(1, 1) <> "" Then
.Value = Target.Cells(1, 1).Value
Else
.Value = Date
End If
Else
.Visible = False
End If
End With
End Sub
Private Sub DTPicker21_CloseUp()
ActiveCell.Value = Me.DTPicker21.Value
Me.DTPicker21.Visible = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 2 Or Target.MergeCells Then
If Target.Cells(1, 1).Value = "" Then
DTPicker21.Visible = False
End If
End If
End Sub
代码截图:
代码解析:
第1行到第18行代码工作表的SelectionChange事件,当选择工作表的B列第2行以下的单个单元格时显示日期控件供用户选择日期。
其中第3行代码设置显示日期控件的触发条件。只有当用户选择B列第2行以下单元格且只能选择单个单元格时才显示日期控件,Or Target.MergeCells这个条件是指合并单元格。
第4行到第8行代码显示日期控件并设置日期控件的大小等于所选单元格的大小。
第9行到第13行代码,如果单元格已经输入了日期,将单元格中的日期赋给日期控件,否则将当前日期赋给日期控件。
第15行代码如果选择的是其他列则隐藏日期控件。
第19行到第22行代码日期控件的CloseUp事件,将日期控件的值赋给活动单元格后隐藏日期控件。
第23行到第29行代码工作表的Change事件,如果删除了B列单元格的日期则隐藏日期控件。
代码的运行:
选择后的工作表:
今日内容回向:
1 本例的控件是什么?
2 本例的控件是如何添加的?
3 日期代码的录入是否能清楚了?
QTimeEdit继承自QDateTimeEdit类,因此许多的特性和功能都由QDateTimeEdit类提供,它是一个用来编辑时间的控件(即编辑时,分,秒). QTimeEdit在语法上也可以设置弹出日历,但是不起作用。
创建QTimeEdit时,如果不设置时间,则系统会为其指定一个默认的时间:0时0分0秒。
QTimeEdit类继承关系:
创建文件qtimeedit.py, 要测试的信息和QDateTimeEdit类似,通过测试可以知道,有关日期的操作函数可以正常起作用。完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QDate, QTime, QDateTime
from PyQt5.QtWidgets import (QApplication, QWidget, QTimeEdit,
QPlainTextEdit, QPushButton, QVBoxLayout)
class DemoTimeEdit(QWidget):
def __init__(self, parent=None):
super(DemoTimeEdit, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QTimeEdit Demo!')
# 设置窗口大小
self.resize(400, 300)
self.initUi()
def initUi(self):
#创建日期时间控件并设置显示格式
self.dtEdit = QTimeEdit(self)
self.dtEdit.setDisplayFormat('HH:mm:ss')
#设置日期的最大与最小值,在当前日期上,前后大约偏移10年
self.dtEdit.setMinimumDate(QDate.currentDate().addDays(-3652))
self.dtEdit.setMaximumDate(QDate.currentDate().addDays(3652))
self.dtEdit.setTime(QTime.currentTime())
#时间改变时触发
self.dtEdit.timeChanged.connect(self.onTimeChanged)
#创建按钮,点击按钮,获取当前日期和时间
self.btnDateTimeInfo = QPushButton('日期时间信息')
self.btnDateTimeInfo.clicked.connect(self.onButtonDateTimeClicked)
#创建信息显示区域
self.textShower = QPlainTextEdit(self)
self.textShower.setReadOnly(True)
vLayout = QVBoxLayout(self)
vLayout.setSpacing(10)
vLayout.addWidget(self.dtEdit)
vLayout.addWidget(self.btnDateTimeInfo)
vLayout.addWidget(self.textShower)
self.setLayout(vLayout)
def onTimeChanged(self, time):
self.showInfo(time.toString('hh:mm:ss'))
def onButtonDateTimeClicked(self):
#日期时间
dateTime = self.dtEdit.dateTime()
#最大日期
maxDate = self.dtEdit.maximumDate()
#最大日期时间
maxDateTime = self.dtEdit.maximumDateTime()
#最大时间
maxTime = self.dtEdit.maximumTime()
#最小日期
minDate = self.dtEdit.minimumDate()
#最小日期时间
minDateTime = self.dtEdit.minimumDateTime()
#最小时间
minTime = self.dtEdit.minimumTime()
self.showInfo('日期和时间信息')
self.showInfo('日期时间为: ' + dateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
self.showInfo('最小日期为: ' + minDate.toString('yyyy:MM:dd [ddd]'))
self.showInfo('最大日期为: ' + maxDate.toString('yyyy:MM:dd [ddd]'))
self.showInfo('最小时间为: ' + minTime.toString('hh:mm:ss'))
self.showInfo('最大时间为: ' + maxTime.toString('hh:mm:ss'))
self.showInfo('最小日期时间为: ' + minDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
self.showInfo('最大日期时间为: ' + maxDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
def showInfo(self, strInfo:str):
#print(strInfo)
self.textShower.appendPlainText(strInfo)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoTimeEdit()
window.show()
sys.exit(app.exec())
运行结果如下图:
测试QTimeEdit
喜欢本文内容就收藏,点赞,评论,关注和转发。
WinForms中,DateTimePicker 控件用于让用户选择日期和时间。以下是如何使用 DateTimePicker 控件的一些基本信息和示例代码:
datetimePicker1.Value = DateTime.Now;
datetimePicker1.Format = DateTimePickerFormat.Short;
datetimePicker1.ShowUpDown = true;
以下是一个简单的示例,演示如何在窗体加载时设置 DateTimePicker 控件的一些基本属性,并处理 ValueChanged 事件:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 设置 DateTimePicker 的默认值为当前日期和时间
datetimePicker1.Value = DateTime.Now;
// 设置日期格式为短格式(例如,"MM/dd/yyyy")
datetimePicker1.Format = DateTimePickerFormat.Short;
// 启用时间选择
datetimePicker1.ShowUpDown = true;
// 添加 ValueChanged 事件处理程序
datetimePicker1.ValueChanged += new EventHandler(datetimePicker1_ValueChanged);
}
private void datetimePicker1_ValueChanged(object sender, EventArgs e)
{
// 当用户选择的日期和时间发生变化时,执行此方法
DateTime selectedDate = datetimePicker1.Value;
// 在这里添加您的代码,例如更新 UI 或记录日志
}
}
在这个示例中,我们首先设置了 DateTimePicker 控件的默认值、日期格式和时间选择的启用状态。然后,我们为 ValueChanged 事件添加了一个处理程序,当用户选择的日期和时间发生变化时,该处理程序会被调用。在处理程序中,您可以根据需要执行任何逻辑,例如更新 UI 或将选定的日期和时间存储到变量中。
通过这些基本步骤,您可以在 WinForms 应用程序中轻松地使用 DateTimePicker 控件来让用户选择日期和时间。
*请认真填写需求信息,我们会在24小时内与您取得联系。