3

私が抱えている問題についての助けを探しています

この質問がすでに行われている場合は申し訳ありませんが、類似したものは見つかりません。

アイデアは、画像ボックスがクリックされたときに画像をオンに変更することです。

画像ボックスを2秒以上押し続けて新しいフォームを開き、画像ボックスをオフのままにした場合。

ただし、画像ボックスをクリックして2秒間押し続けてから戻る場合は、画像ボックスの状態をオンのままにする必要があります。

これが私がこれまでに試したことです。

これが正しく機能するには、MouseUpイベントの発生を停止する必要があると思います。

ティックが発生したときにMouseUpを停止する方法はありますか?

これを行うためのより簡単でより良い方法はありますか?

どんな助けでもいただければ幸いです。

    private void time_HoldDownInternal_Tick(object sender, EventArgs e)
    { 
        time_HoldDownInternal.Enabled = false;
        time_HoldDownInternal.Interval = 1000;
        form1show.Visible = true;
    }

    private void pb_pictureBoxTest_MouseDown(object sender, MouseEventArgs e)
    {
        mainMenuVariables.mousedown = true;
        time_HoldDownInternal.Enabled = true;
    }

    private void pb_pictureBoxTest_MouseUp(object sender, MouseEventArgs e)
    {
        mainMenuVariables.mousedown = false;
        //MessageBox.Show("mouse up");
        time_HoldDownInternal.Enabled = false;
        time_HoldDownInternal.Interval = 1000;
    }

    private void pb_pictureBoxTest_Click(object sender, EventArgs e)
    {
        if (mainMenuVariables.mousedown == true)
        {
            if (mainMenuVariables.pictureBox == false)
            {
                mainMenuVariables.pictureBox = true;
                pb_pictureBoxTest.Image = new Bitmap(mainMenuVariables.pictureBoxOn);
                return;
            }
            if (mainMenuVariables.pictureBox == true)
            {
                mainMenuVariables.pictureBox = false;
                pb_pictureBoxTest.Image = new Bitmap(mainMenuVariables.pictureBoxOff);
                return;
            }
        }
        if (mainMenuVariables.mousedown == false)
        {
            //nothing
        }
    }
4

1 に答える 1

5

タイマーを開始するのではなく、マウスを押したまま現在の時刻を記録するだけです。次に、マウスを上にして、2秒経過したかどうかを確認します。例えば:

private void pb_pictureBoxTest_MouseDown(object sender, MouseEventArgs e)
{
    mainMenuVariables.mousedown = true;
    mainMenuVariables.mousedowntime = DateTime.Now;
}

private void pb_pictureBoxTest_MouseUp(object sender, MouseEventArgs e)
{
    mainMenuVariables.mousedown = false;
    var clickDuration = DateTime.Now - mainMenuVariables.mousedowntime;

    if ( clickDuration > TimeSpan.FromSeconds(2))
    {
        // Do 'hold' logic (e.g. open dialog, etc)
    }
    else
    {
        // Do normal click logic (e.g. toggle 'On'/'Off' image)
    }
}
于 2012-05-02T01:03:38.350 に答える