2017-09-24 193 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