2017-09-24 192 views
0

我正在創建一個簡單的程序,使用Excel VBA,這將允許我在運行時隨着鼠標移動或拖動鼠標來調整控件的大小。然而,似乎我得到不同的結果控制調整鼠標移動或鼠標拖動的大小

我不知道爲什麼我得到一個不同的最終寬度的結果,但在這裏是如何我做它:

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As 
    Integer, ByVal X As Single, ByVal Y As Single) 

    initialx = X 
    initialy = Y 
    xmove = True 
End Sub 

Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As 
    Integer, ByVal X As Single, ByVal Y As Single) 
    Dim newx, newy As Single 

    If xmove = True Then 
     newx = Math.Abs(X - initialx) 
     newy = Math.Abs(Y - initialy) 
     TextBox1.Width = TextBox1.Width + newx 
    End If 
End Sub 

和這裏的如何我的形式看起來像:

enter image description here

正如你在截圖中看到,該文本框的寬度應以9增加,因爲它是由鼠標光標最初點擊鼠標光標(位置),涵蓋距離在控制上。

而我堅持這一點。爲什麼它不按預期工作?

+0

每次鼠標移動觸發時,增加文本框的大小,即使你曾* *調整從之前移動(所以目前的寬度已經比原來的寬度以上) –

+0

我不我不知道什麼是錯,但我從來沒有想到這一點。它現在按預期工作。謝謝你的提示! – kcodes

+0

沒問題 - 找出你自己以外的其他人的問題更容易! –

回答

0

它需要全局變量initialWidth。

Dim initialX, initialY, xmove, initialWidth 
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As _ 
    Integer, ByVal X As Single, ByVal Y As Single) 

    initialX = X 
    initialY = Y 
    initialWidth = TextBox1.Width '<~~setting initialWidth 
    xmove = True 
    TextBox2.Value = initialX 
    TextBox3.Value = initialY 
End Sub 

Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As _ 
    Integer, ByVal X As Single, ByVal Y As Single) 
    Dim newx, newy As Single 

    If xmove = True Then 
     newx = Math.Abs(X - initialX) 
     newy = Math.Abs(Y - initialY) 
     'TextBox1.Width = TextBox1.Width + newx 
     TextBox1.Width = initialWidth + newx 
     TextBox5.Value = newx 
     TextBox6.Value = newy 
    End If 
End Sub