dragOver 이벤트 핸들러를 시도했지만 정상적으로 작동하지 않았습니다.C#에서 onclick() 이벤트를 트리거하고 마우스 클릭을 계속 누른 상태에서 onDrag() 이벤트를 감지 할 수있는 방법이 있습니까
나는 피아노를 작업 중이며 mousedown이 해당 키에서 발생하지 않았더라도 음을 재생할 수 있기를 원합니다.
여기에 이벤트 핸들러가 있습니까?
아래는 제가 작업하고있는 피아노의 그림입니다.
dragOver 이벤트 핸들러를 시도했지만 정상적으로 작동하지 않았습니다.C#에서 onclick() 이벤트를 트리거하고 마우스 클릭을 계속 누른 상태에서 onDrag() 이벤트를 감지 할 수있는 방법이 있습니까
나는 피아노를 작업 중이며 mousedown이 해당 키에서 발생하지 않았더라도 음을 재생할 수 있기를 원합니다.
여기에 이벤트 핸들러가 있습니까?
아래는 제가 작업하고있는 피아노의 그림입니다.
이
private void object_MouseEnter(object sender, EventArgs e)
{
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
'Do Something
}
}
마우스 용 가져 오기가 필요합니까? –
그것은 System.Windows.Forms에 있습니다. – SteveB
그 가져 오기가 있지만 현재 컨텍스트에 마우스가 존재하지 않는다고 말하고 있습니다. –
예를 클릭하고 여기 like을 끌어하려는 클릭 않다면 당신은 볼 마우스를 감시 입력 한 후 마우스의 상태를 확인 할 수 있어야한다 :
를private void MyMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && e.Clicks == 1)
{
//Bla bla bla , do whatever you want
}
}
myWrapper에 대한 가져 오기가 필요합니까? 코드를 친절하게 설명해 주시겠습니까? –
@KurtCamilleri 아니, 너는 필요 없어 ............. 나는 대답의 모양을 다시 편집했습니다 – napi15
도움을 주셔서 감사합니다. 그러나 작동하지 않습니다. –
MouseUp 이벤트가 해제되면 마우스가 다른 단추 위에 있는지 확인할 수 있습니다. 그럴 경우 해당 버튼을 클릭하십시오. 나는 this 질문에있는 답변에서 GetCursorPosition 코드를 가져갔습니다.
buttonClick이 이미 해당 버튼에 대해 처리되었는지 여부를 알 수 있도록 버튼 태그에 true 및 false를 넣어야했습니다.
// running as Console window
// output from...
// 1. clicking and releasing on button1
// 2. clicking and holding on button1 and then releasing not over button1 or button2,
// 3. clicking and holding on button1 and then
// moving mouse to over button2 and releasing mouse.
// button1 Click
// button1 Ding!
// button1 MouseUp
// button1 MouseUp
// button1 Ding!
// button1 MouseUp
// button1 Ding!
// button2 Click
// button2 Ding!
private List<Button> _buttons { get; set; }
public Form1()
{
InitializeComponent();
button1.MouseUp += Button_MouseUp;
button2.MouseUp += Button_MouseUp;
button1.Click += Button_Click;
button2.Click += Button_Click;
button1.Tag = false;
button2.Tag = false;
_buttons = new List<Button>()
{
button1, button2
};
}
private void Button_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
var button = sender as Button;
Console.WriteLine($"{button.Text} MouseUp");
if (!(bool)button.Tag)
ButtonClick(button);
else
button.Tag = false;
Func<Button, bool> ContainsMouse = (b) =>
{
var rect = b.RectangleToScreen(b.DisplayRectangle);
var pos = GetCursorPosition();
return rect.Contains(pos.X, pos.Y);
};
var hoverButton = _buttons.SingleOrDefault(b => ContainsMouse(b));
if (hoverButton != null && !hoverButton.Equals(button))
hoverButton.PerformClick();
}
private void Button_Click(object sender, EventArgs e)
{
var button = sender as Button;
Console.WriteLine($"{button.Text} Click");
ButtonClick(button);
button.Tag = true;
}
private void ButtonClick(Button button)
{
Console.WriteLine($"{button.Text} Ding!");
}
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public static implicit operator Point(POINT point)
{
return new Point(point.X, point.Y);
}
}
/// <summary>
/// Retrieves the cursor's position, in screen coordinates.
/// </summary>
/// <see>See MSDN documentation for further information.</see>
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
public static Point GetCursorPosition()
{
POINT lpPoint;
GetCursorPos(out lpPoint);
//bool success = User32.GetCursorPos(out lpPoint);
// if (!success)
return lpPoint;
}
고맙습니다. 왼쪽 버튼 위로 버튼이 발생한 후에 작동합니다.나는 다음 버튼 위로 마우스를 가져 가면 작업 할 무언가를 원했고, 그 버튼을 즉시 누를 수있게했다. @Blake –
@ KurtCamilleri 더 구체적으로 할 수 있습니까? 무슨 뜻인지 잘 모르겠다. 나는이 목적이 동시에 두 개의 키를 연주 할 수 있다고 상상하고있었습니다. –
@KurtCamilleri 다음 설명은 정확합니까? 버튼 1을 클릭 한 상태에서 "Dings!" MouseDown에서 button2로 드래그하고 "Dings!" MouseUp에? Btw, 그것이 정확하다면, 나는 그것이 직관적이라고 확신하지 못합니다. 사용자로서 그렇게 될 것이라고 추측하지는 않습니다. –
버튼 밖? 좀 더 명확 해 질 수 있니? – napi15
button1을 클릭 한 다음 (마우스를 계속 누르고 있으면) button2로 드래그합니다. 나는 또한 button2의 소리를 연주하고 싶습니다. 이 사건이 있습니까? –
@KurtCamilleri 당신을 위해 일할 나의 대답이 있는지 알고 싶습니다. 필자의 테스트와 결과는 완벽하게 기능을 발휘했다. –