2016-12-12 2 views
0

그래서 슬라이더를 만들려고합니다. 커서를 사용하여 버튼의 x 위치를 이동합니다.Visual Studio C# 단추의 X 위치를 깜박임없이 마우스로 이동하는 방법

나는 mouseDown, mouseUp 및 mouseMove 함수의 세 가지 함수가 있습니다. mouseUp 및 mouseDown 함수에서 변수를 true 및 false로 설정하여 마우스를 클릭했는지 여부를 프로그램에 알립니다. mouseMove 함수에서 마우스를 클릭 할 때 버튼의 x 위치를 마우스의 x 위치로 설정하도록 프로그램에 지시합니다. 이 작동하지만 2 문제가 있습니다.

첫 번째 문제는 버튼을 눌러 이동하면 버튼이 마우스의 x와 함께 움직이지만 마우스와 버튼 사이에는 공백이 있다는 것입니다. 다음과 같이 보입니다. 커서 ....... 버튼 폼의 해상도를 변경하면 커서와 버튼 사이의 간격이 변경됩니다.

두 번째 문제는 버튼을 움직이면 조금 깜박입니다. 더 빠른 속도로만이 작업을 수행하지만 내 경우에는 문제가됩니다.

내 코드는 다음과 같습니다

bool mouseDown = false; 

private void volumeGrabBT_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     mouseDown = true; 
    } 
} 

private void volumeGrabBT_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     mouseDown = false; 
    } 
} 

private void volumeGrabBT_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (mouseDown == true) 
    { 
     Point volumeBTPoint = new Point(); 
     volumeBTPoint.X = Cursor.Position.X; 
     volumeBTPoint.Y = volumeGrabBT.Location.Y; 
     volumeGrabBT.Location = volumeBTPoint; 
    } 
} 

volumeGrabBT 내가 마우스를 따라 이동하는 노력하고있어 버튼입니다. volumeBTPoint는 버튼의 위치를 ​​설정하려는 버튼의 포인트입니다.

누군가가 이러한 문제를 해결할 수 있기를 바랍니다. 미리 감사드립니다!

답변

1

폼의 생성자에서 몇 가지 추가 양식 스타일을 설정하여 깜박임을 수정할 수 있다고 생각합니다. SetStyle(ControlStyles.AllPaintingInWmPaint |ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); . 이중 버퍼링을 사용하고 일반적으로 더 빨리 그립니다.

클래스의 경우 Cursor 클래스의 경우 화면과 관련이 있으며 양식은 아닙니다.

Point clientCursor = this.PointToClient(Cursor.Position); 

를 한 후 클라이언트 공간에서 정확한 X를 얻을 수 clientCursor를 사용 :이처럼 커서의 클라이언트의 공간 위치를 얻을 수 this.PointToClient() 기능을 사용할 수 있습니다.

+0

감사의 인사. 두 가지 제안은 완벽하게 작동합니다! 깜박임과 빈 공간이 수정되었습니다. – Thow

1

화면 좌표를 클라이언트 좌표로 변환해야합니다.

Point volumeBTPoint = new Point(); 
Point point = this.PointToClient(Cursor.Position); 
volumeBTPoint.X = point.X; 
volumeBTPoint.Y = volumeGrabBT.Location.Y; 
volumeGrabBT.Location = volumeBTPoint; 

대신 this 당신이 (등 Panel, GroupBox) 버튼의 부모 컨트롤을 사용한다

.

관련 문제