1.定義變量記錄鍵是否被按下,按下的累計時間
創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、嘉定網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為嘉定等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
Dim?按下A鍵??As?Boolean
Dim?按下A鍵時間?As?Integer
2.添加一個TextBox1用于接收鍵盤事件,或者直接用窗體的鍵盤事件(確保KeyPreview為True)
在KeyDown事件中添加如下代碼:
If?e.Keycode?=?keys.A?Then?按下A鍵?=?True
在KeyUp事件中添加如下代碼:
If?e.Keycode?=?keys.A?Then?按下A鍵?=?False
3.添加一個Timer1控件,調(diào)整Timer1的Interval來決定按鍵頻率,記得要把Timer1.Enable開啟
在Tick事件中添加如下代碼:
If?按下A鍵?=?True
按下A鍵時間+=1
Call?音量設(shè)置(按下A鍵時間?*?10)
End?If
PS:?按下的秒數(shù) =?按下A鍵時間*Timer1.Interval / 1000
一定要先在VB中添加excel引用。
在工程中引用Microsoft Excel類型庫: 從"工程"菜單中選擇"引用"欄;選擇Microsoft Excel 11.0 Object Library(EXCEL2003),然后選擇"確定"。表示在工程中要引用EXCEL類型庫。
調(diào)用excel的工作表中的命令按鈕,代碼如下:
Private Sub Command1_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
Dim FileName, SheetName As String
FileName = "e:\data.xls" '打開的工作簿路徑名稱
SheetName = "sheet1" '命令按鈕所在的工作表名
Set xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL對象
Set xlBook = xlApp.Workbooks.Open(FileName) '打開已經(jīng)存在的EXCEL工件簿文件
……
xlBook.Close (True) '保存并關(guān)閉工作簿
xlApp.Quit '結(jié)束EXCEL對象
Set xlApp = Nothing '釋放xlApp對象
end sub
首先:
textbox里沒有顯示,是因為SerialPort1和TextBox2不是同一線程創(chuàng)建的,需要跨線程操作。需要用到委托,這樣才能顯示出來。
其次:
我覺得用串口的接收數(shù)據(jù)事件更好一些。
下面代碼供參考:
'----------------------
'串口接收數(shù)據(jù)事件,其實比用定時器更好,
'觸發(fā)事件的條件可以自己在form_load中設(shè)置ReceivedBytesThreshold屬性數(shù)值,默認(rèn)為ReceivedBytesThreshold=1
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim strRecvData As String = ""
strRecvData = SerialPort1.ReadExisting
Call disPlayComData(strRecvData)
End Sub
Delegate Sub callback(ByVal strT As String) '定義委托
Sub showString(ByVal comdata As String) '顯示結(jié)果
Me.TextBox1.Text = "結(jié)果:" comdata
End Sub
Sub disPlayComData(ByVal strTmp As String) '判定是否為跨線程
If Me.TextBox1.InvokeRequired Then
Dim d As New callback(AddressOf showString)
Me.Invoke(d, New Object() {strTmp})
Else
Me.TextBox1.Text = strTmp
End If
End Sub
一個一個回答吧。
1、CheckBox 的 MouseDown 事件發(fā)生在 CheckedChange 事件之前,但這是指在單步調(diào)試的狀態(tài)下,事實上在編譯好的程序中,這兩個事件是分別處在兩個不同的線程中,單純的考慮時間上的前后沒有意義。
2、MouseDown 在先。Scroll 事件發(fā)生在滾動條移動的過程中,而 ValueChange 事件發(fā)生在滾動條的 Value 屬性發(fā)生改變的時候,兩者沒有必然聯(lián)系。舉例,當(dāng)你用鼠標(biāo)拖動滾動條移動的時候,這時發(fā)生的是 Scroll 事件;松開鼠標(biāo)鍵后,Value 屬性值改變,這時候觸發(fā) ValueChange 事件。另外,如果滾動條的 Value 是通過代碼改變的而非鼠標(biāo)拖動的,是不觸發(fā) Scroll 事件只觸發(fā) ValueChange 事件。
3、ClientSize 是指控件的工作區(qū)的高度和寬度。比如說 form,它的 Size 值是包括標(biāo)題欄、邊框等,而 ClientSize 是工作區(qū),不包括標(biāo)題欄、邊框等。
4、一般是 Load→Paint→Shown。
Dim so As Integer
Dim A As Integer
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1000
A = 1
End Sub
Private Sub Timer1_Timer()
so = so + 1
If A = 0 Then
so = 0
Me.Caption = "正常運行"
Exit Sub
Else
Me.Caption = so
If so = 6 Then
so = 0
' 觸發(fā)button事件
End If
End If
End Sub
變量值的改變本身就是你程序控制的,也就是說它的變化完全是在你掌控中的,做變量值改變的觸發(fā)事件實在沒有價值。
通常編程者關(guān)心的應(yīng)該是用戶操作的控件值發(fā)生變化,但這些控件的事件通常都是定義好的,且已經(jīng)定義的非常全了。
猜測摟主其實是想學(xué)習(xí)自己制作控件,那就高深了,很多底層的事件通常都是從基本控件中獲得的!