重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
沒明白題主的意思,播放過程中一直被觸發(fā)的事件?為啥會一直觸發(fā)呢?wmp_PlayStateChange 是播放狀態(tài)改變的事件,就是播放、暫停、停止,沒有播放過程中一直觸發(fā)的事件。
專業(yè)從事成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設,高端網(wǎng)站制作設計,小程序制作,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團隊竭力真誠服務,采用H5建站+CSS3前端渲染技術(shù),成都響應式網(wǎng)站建設,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
如果是進度條的話,wmp.currentMedia.duration 為歌曲總長度,wmp.Ctlcontrols.currentPosition 為目前播放的進度,你可以設置進度條的最大值為歌曲總長度,然后用計時器不斷設置進度條的Value 值為 wmp.Ctlcontrols.currentPosition 就好了啊。
一個一個回答吧。
1、CheckBox 的 MouseDown 事件發(fā)生在 CheckedChange 事件之前,但這是指在單步調(diào)試的狀態(tài)下,事實上在編譯好的程序中,這兩個事件是分別處在兩個不同的線程中,單純的考慮時間上的前后沒有意義。
2、MouseDown 在先。Scroll 事件發(fā)生在滾動條移動的過程中,而 ValueChange 事件發(fā)生在滾動條的 Value 屬性發(fā)生改變的時候,兩者沒有必然聯(lián)系。舉例,當你用鼠標拖動滾動條移動的時候,這時發(fā)生的是 Scroll 事件;松開鼠標鍵后,Value 屬性值改變,這時候觸發(fā) ValueChange 事件。另外,如果滾動條的 Value 是通過代碼改變的而非鼠標拖動的,是不觸發(fā) Scroll 事件只觸發(fā) ValueChange 事件。
3、ClientSize 是指控件的工作區(qū)的高度和寬度。比如說 form,它的 Size 值是包括標題欄、邊框等,而 ClientSize 是工作區(qū),不包括標題欄、邊框等。
4、一般是 Load→Paint→Shown。
如果是單個字的重復還好說,可是輸入詞組時,一串字的重復,而且一個字一次事件,這肯定是微軟的一個Bug。
辦法是有的,把中文字暫時放入字符緩沖中,遇到成雙時對半分,前后對比一下,如果相同表示這次輸入完成。
Private?Sub?ListView1_KeyPress(ByVal?sender?As?Object,?ByVal?e?As?System.Windows.Forms.KeyPressEventArgs)?Handles?ListView1.KeyPress
Static?buffer?As?String
Static?ar(1)?As?String
If?Asc(e.KeyChar)??0?Then
buffer?=?e.KeyChar
If?buffer.Length?Mod?2?=?0?Then
ar(0)?=?buffer.Substring(0,?buffer.Length?\?2)
ar(1)?=?buffer.Substring(buffer.Length?\?2)
If?ar(0)?=?ar(1)?Then
Debug.Print(ar(0))?'輸出中文
buffer?=?Nothing
End?If
End?If
Else
Debug.Print(e.KeyChar)?'輸出英文
End?If
End?Sub
用一個全局變量計數(shù),單擊一次變量加1,計數(shù)到3或4時變量清0執(zhí)行你的事件
Private clickCnt As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
clickCnt += 1
If clickCnt = 3 Then
clickCnt = 0
MessageBox.Show("點擊了3次")
End If
End Sub
首先這個要看的子函數(shù)執(zhí)行的情況了,比如你子函數(shù)要8秒才能執(zhí)行完成,你1秒鐘執(zhí)行一次,到時會有好幾個子函數(shù)在運行,肯定會影響程序運行的。你要調(diào)整時間才能讓子函數(shù)不影響主程序;
再一個,如果不想影響主程序,你可以再建一個程序,專門用來執(zhí)行子函數(shù),然后讓那個程序用定時器每秒執(zhí)行一次子函數(shù),這樣就不會影響主程序;
熟悉VB的朋友對使用ActiveX控件一定不會陌生,眾多控件極大地方便了編程,但
唯一的缺陷是不能動態(tài)加載控件,必須在設計時通過引用,將控件放置在窗體上。
VB6.0已能夠解決該問題,只是幫助中沒有明確說明,并且沒有描述到一些關鍵功能,
由于以前的版本中可以動態(tài)創(chuàng)建進程外服務:如果對象是外部可創(chuàng)建的,可在 Set 語
句中用 New 關鍵字、CreateObject 或 GetObject 從部件外面將對象引用賦予變量。
如果對象是從屬對象,則需使用高層對象的方法,在 Set 語句中指定一個對象引用:
Dim xlApp1 As Excel.Application
Set xlApp1 = New Excel.Application
或
Dim xlApp As Object '定義存放引用對象的變量。
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True
---- 這些語法很容易造成誤導,以為動態(tài)加載ActiveX控件也是此方法,可能有朋友也
象我一樣利用CreateObject嘗試了無數(shù)次,卻無功而返,不知微軟公司是出于何種考
慮,動態(tài)加載ActiveX控件是擴展控件集合的方式實現(xiàn),通過實際摸索,終于就如何實
現(xiàn)動態(tài)ActiveX控件找出了一條切實可行的方法,下面以一個具體的實例來詳細說明。
一、ActiveX控件
---- ActiveX 控件是 Visual Basic 工具箱的擴充部分。使用 ActiveX 控件的方法與
使用其它標準內(nèi)裝的控件,如 CheckBox 控件,完全一樣。在程序中加入 ActiveX 控
件后,它將成為開發(fā)和運行環(huán)境的一部分,并為應用程序提供新的功能。
---- ActiveX 部件通過客戶端/服務器關系與應用程序— 及與部件相互之間— 交互作
用。客戶端是使用部件功能的應用程序代碼或部件。服務器是部件及其關聯(lián)的對象。例
如,假設應用程序使用 ActiveX 控件來提供一個標準的雇員窗體,供公司的多種應用
程序使用。提供雇員窗體的 ActiveX 控件就是服務器,使用這個控件的應用程序就是
服務器的客戶端。
二、加載方法
---- VB6.0中對Controls 集合進行了擴展,以前版本中Controls 集合在窗體上列舉出
已加載的控件,這在迭代過程中是很有用的。Controls 集合標識一個叫做 Controls
的內(nèi)在窗體級變量。如果忽略可選的 object 所在處的整數(shù),則關鍵字 Controls 必須
包括在內(nèi)。我們通常在窗口中使用如下代碼:
Text1.Text="Hello, world"
其實也可以使用如下代碼達到同一目的:
Controls(1).Text="Hello, world"
---- 在VB6.0中除了原來的Clear、Remove 方法外(很奇怪,為什么微軟在VB5.0中只提
供這兩種方法,而沒有提供Add方法,因為沒有Add,這兩種方法也就沒什么用處),增
加了Add方法,該方法就是用于動態(tài)加載控件的:
Controls.Add(progid as String, Name as String);
progid: ActiveX部件的ProgID,如:"VB.CheckBox";
Name:ActiveX部件加載后的名稱,如: "MyCheckBox";
若要在窗體上添加一個名為MyButton的按鈕,可以使用:
dim oControl as Object '窗體級變量
注意:這里聲明為Object對象類型
Private Sub LoadControl()
Set oControl = Controls.Add
("VB.CommandButton", "MyButton")
oControl.Left = 10
oControl.Top = 10
oControl.Visible = True '使控件可見
End Sub
---- 這是VB6.0的標準語法,它在例程中也是如此演示的,不過該方法雖然現(xiàn)實了控件
的動態(tài)加載,按鈕顯示在窗體上,可以象普通按鈕一樣按下去,但加載的控件不能預先
設計響應事件代碼,如:事件Sub MyButton_Click()將是非法的,當然,可以將要響應
的事件封裝在控件內(nèi)部。就編程的觀點來看該方法沒什么大的用處,開發(fā)ActiveX控件
的目的是為了資源共享,為了被其他開發(fā)人員利用,所以要提供必要的事件接口,顯然
利用該方法不行,通過分析VBControls等相關對象,找出VBControlExtender對象與
EventInfo相結(jié)合能提供事件陷井捕捉,VBControlExtender對象對動態(tài)添加控件特別有
用,它提供了一套通用的屬性、方法、事件給開發(fā)人員,它的一個突出特點是能編程設
計控件的事件,熟習類編程的朋友對帶事件的對象聲明一定不會陌生:
---- Dim WithEvents objElemt as CElemtVBControlExtender也不例外,聲明的語法
一樣,只不過它有個特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到對象使
用RaiseEvent產(chǎn)生的所有事件,EventInfo數(shù)據(jù)結(jié)構(gòu)映射了事件的名稱、參數(shù)個數(shù)和參
數(shù)的值。VBControlExtender和 EventInfo相結(jié)合,采用Select Case 就可以預先將不
同類對象的事件放置一起,各自獨立運作。將上面的代碼改寫一下就能提供Click事件
了:
---- Dim WithEvents oControl As VBControlExtender '帶事件聲明聲明之后您就可
以在代碼窗口的左上角的對象下拉框中發(fā)現(xiàn)該對象出現(xiàn)了,也就是說,該對象有了事件
或方法了,它的事件有DragDrop,DragOver ,LostFocus ,GotFocus ,ObjectEvent
和Validate,其中ObjectEvent是通用的事件捕捉。
Private Sub LoadControl()
Set oControl = Controls.Add
("VB. CommandButton", "MyButton")
oControl.Visible = True
End Sub
Private Sub oControl_ObjectEvent(Info As EventInfo)
Select Case Info.Name
Case "Click" 'Click事件
'您可以添加處理Click事件代碼
MsgBox "您按了MyButton!"
Case Else ' 其他事件
' Handle unknown events here.
End Select
End Sub
---- 當然對微軟提供的標準控件能采用該方法添加,大家都不會懷疑,但自己開發(fā)的
控件也能嗎?答案是肯定的,我們可以用一個實際的例子進行說明。