家好,我們今日繼續講解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小時內與您取得聯系。