0

clickで左または右に移動できるパネルがあります(現在の位置に応じて自動的に選択され、距離は静的です)。また、ユーザーは、パネルをクリックし、ボタンを押したままマウスを動かすことで、パネルを縦方向にドラッグできます。問題は、パネルが垂直に移動された後にドロップされたときにパネルが左右に移動することです。そのため、ユーザーは後でもう一度クリックして、正しい側 (左右) に移動する必要があります。私が使用している方法は次のとおりです。イベントハンドラをパネルに追加する(ここではストリップと呼ばれます)

Strip.MouseDown += new MouseEventHandler(button_MouseDown);
Strip.MouseMove += new MouseEventHandler(button_MouseMove);
Strip.MouseUp += new MouseEventHandler(button_MouseUp);
Strip.Click += new EventHandler(strip_Click);

そして、ここで上記のすべての方法:

void button_MouseDown(object sender, MouseEventArgs e)
    {
        activeControl = sender as Control;
        previousLocation = e.Location;
        Cursor = Cursors.Hand;
    }

void button_MouseMove(object sender, MouseEventArgs e)
    {
        if (activeControl == null || activeControl != sender)
            return;

        var location = activeControl.Location;
        location.Offset(0, e.Location.Y - previousLocation.Y);
        activeControl.Location = location;
    }

void button_MouseUp(object sender, MouseEventArgs e)
    {
        activeControl = null;
        Cursor = Cursors.Default;
    }

void strip_Click(object sender, EventArgs e) // The one moving strip to left or right
    {
        activeControl = sender as Control;
            if (activeControl.Left != 30)
                activeControl.Left = 30;
            else
                activeControl.Left = 5;
    }

パネルを縦に動かしたときにパネルが左右に動かないようにするにはどうすればよいですか?

4

1 に答える 1

2

クリックとドラッグを区別する必要があります。したがって、「ドラッグ」という名前のプライベート フィールドを追加します。

    private bool dragged;

MouseDown イベント ハンドラーに以下を追加します。

    dragged = false;

MouseMove イベント ハンドラーに以下を追加します。

    if (Math.Abs(location.Y - previousLocation.Y) > 
        SystemInformation.DoubleClickSize.Height) dragged = true;

Click イベント ハンドラーに以下を追加します。

    if (dragged) return;
于 2013-01-03T15:36:45.027 に答える