返回列表 上一主題 發帖

[發問] 如何讓滑鼠移入的判斷只判斷一次~當有改變時~再改變!?

[發問] 如何讓滑鼠移入的判斷只判斷一次~當有改變時~再改變!?

Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Image1.Picture = LoadPicture("")   


Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Image1.Picture = LoadPicture("")   
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")


由於每當滑鼠移動到的每一次~Image1會一直閃爍~是否有辦法讓他只判斷一次?當有改變時~再次判斷~再次改變!
1

評分人數

    • GBKEE: 你有許的主題是可以在原的主題繼續發問,是 ...金錢 -2

回復 14# av8d


    小弟有個想法...
大大您是否試用  list 表單列出 檔案數量  再點選比較方便?

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 4# Hsieh


    大大~如果
checkbo71~80顯示 Image1~10
checkbo101~110顯示 Image11~20

我修改了S的初始值~可是無效~是不是修改錯誤了?

因為我有多個UserForm~又該如何使用?謝謝大大!

TOP

由於每當滑鼠移動到的每一次~Image1會一直閃爍~是否有辦法讓他只判斷一次?當有改變時~再次判斷~再次改變!,  ...
av8d 發表於 2012-9-11 13:53

我大概知道你是在說什麼.

會閃爍是因為你採用 yangjie 的
Image1.Picture = LoadPicture("")   
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")
程式,
而非 Hsieh 所提供的
UserForm
用 Image1.Picture = LoadPicture("")

Class 用
Img = ThisWorkbook.Path & "\" & MyCheck.Caption & ".jpg"
UserForm1.Image1.Picture = LoadPicture(Img)
程式.

因為 MouseMove 實際上是幾乎隨時都在觸發,(在 MouseMove 程式中設中斷點就可確認,即便不操作滑鼠都可能有觸發->桌子震動或是光學滑鼠辨識誤差...)
所以用 yangjie 的程式會一直在清除-重畫-清除... (即你說的閃爍)
而 Hsieh 的程式則是滑鼠移到 UserForm 上時才清除, (在 Class 上則是一直在相同位置上畫相同的圖形, 感覺上是畫面沒有變化)
所以不會有閃爍的情形.

至於你說的 "只判斷一次" 則可能要更低階的 VB 程式碼才有可能做到,
Excel Vba 現成提供的事件中,
沒看到類似 Leave 之類的事件可以產生單次觸發動作.

TOP

回復 10# av8d
不懂你所說的閃爍,上傳檔案看看吧
學海無涯_不恥下問

TOP

本帖最後由 mark15jill 於 2012-9-11 15:19 編輯
Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  ...
av8d 發表於 2012-9-11 13:53



    MouseMove 是 移動 就視為有改變
    不知道您所謂的 有改變是指?
     1.圖檔不同(檔案 檔名
     2.對照數據不同
     3事件不同

如果只是 單一 點擊 才會換圖
那可參考 Click 相關用法

如果只是 雙點擊 才會換圖
那可參考DobleClick 相關用法

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 8# av8d

滑鼠.rar (33.53 KB)
學海無涯_不恥下問

TOP

回復 7# yangjie


    大大~謝謝你~

可是我測試了一下
         Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
        end sub
好像沒有效果~我確定是在Userform1底下運行~

TOP

回復 6# Hsieh
漂亮
H大大的"而表單與物件的MOUSEMOVE事件不會同時存在
                  就可依此做為是否觸及物件的參考
"
讓我想到如此作法
         Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
        end sub
        Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
                  Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")
         end sub
         Private Sub CheckBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                 Image1.Picture = LoadPicture("")   
                 Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格2.JPG")
        end sub
  即可一離開CheckBox1的範圍 即刻 卸載圖形

TOP

回復 5# av8d

這個的重點在於如何讓滑鼠有類似滑出的事件
因為表單及表單物件只有MOUSEMOVE事件
而表單與物件的MOUSEMOVE事件不會同時存在
就可依此做為是否觸及物件的參考
至於你只看到Image2
那是2個Image物件重疊而已
之所以要直接佈置多個Image物件,這樣可避免圖檔必須帶著走的問題
如果你不介意把圖檔必需跟著檔案,就可參考2#的作法
使用單一個Image物件,然後用LoadPicture來變更圖片
總之,方法不只一個,自己動動腦會有更多收穫
學海無涯_不恥下問

TOP

        靜思自在 : 要用心,不要操心、煩心。
返回列表 上一主題