방금 연습 한 Windows-Forms에서 지뢰 찾기 게임을 끝냈습니다.컨트롤이 변경된 경우 mouseUp 이벤트를 인터럽트하는 방법
모든 것이 잘 실행되지만 마우스를 더 이상 가리키지 않아도 버튼을 클릭하여 길게 누르면 펼쳐질 것입니다.
어떻게 해결할 수 있는지 간단하게 알고 있습니까?
강령 :
/// <summary>
/// Build up a new Gamefield with the number of buttons, the user has selected
/// </summary>
private void DrawGameField()
{
_buttons = new Button[_xLength, _yLength];
for (int yPos = 0; yPos < _yLength; yPos++)
{
for (int xPos = 0; xPos < _xLength; xPos++)
{
var btn = new Button()
{
Tag = new Point(xPos, yPos),
Location = new Point(xPos * 30, yPos * 30),
Size = new Size(30, 30),
};
_buttons[xPos, yPos] = (Button)btn;
btn.MouseUp += btn_Click;
_gamePanel.Controls.Add(btn);
}
}
}
/// <summary>
/// Is called when a field is left-clicked
/// </summary>
private void LeftMouseClick(object sender, MouseEventArgs e)
{
var btn = sender as Button;
Point pt = (Point)btn.Tag;
// If there's already a flag on the field make it unclickable for left mouseclick
if (btn.Image != null)
return;
_game.UnfoldAutomatically(pt.X, pt.Y);
btn.Text = (_game.ReturnNumberInField(pt.X, pt.Y)).ToString();
// If clicked field was not a bombfield
if (btn.Text != "-1")
UnfoldFields();
else
LooseGame();
}
모든 버튼을 DrawGameField에와 mouseUp 이벤트를 얻을 수 - 방법. 모든 단추는 해당 메서드에서 태그를 가져 오므로 식별 할 수 있습니다. LeftMouseClick은 사용자 (mouseUp)가 gamefield 버튼 중 하나를 클릭하는 즉시 호출됩니다.
왼쪽 마우스 단추를 놓은 단추가 실제로 클릭 한 단추와 다른 경우 취소하고 싶습니다.
이것은 사용자에게 마음을 바꿀 가능성을 주어야한다. 그는 실제로 들판을 클릭 할 수도 있지만 그 분야를 펼치고 싶지는 않다는 것을 깨닫는다. 그러나 내 해결책에서는 그는 할 수 없다. 아직 그의 클릭을 취소하려면 ...
'LeftMouseClick'을 어떤 이벤트에 구독하셨습니까? –
'LeftMouseClick' 어떤 이벤트를 처리합니까? 그것은'Click' 또는'MouseUp' (MouseDown이 아니라) 중 하나 여야합니다. – Sinatr