1

TIFF画像を表示するWindowsフォームアプリケーションを拡張しています。アプリケーションには、パネルの上部に画像ボックスがあり、一度に1つの画像ページを表示します(ユーザーが特定の画像を表示するためにクリックできるサムネイルがあります)。複数の画像がある場合、ユーザーはマウスホイールなどのイベントを使用して次の画像を見たいと考えています。現在、前と次の矢印ボタン/機能がありますが、もっと欲しいです)

私がすべきだと思うのは、マウスホイールイベント中に画像が下部にあるかどうかを確認してから、次の画像を選択することです。また、逆の方法で、前の画像を取得し、マウスホイールを上に向けて使用する場合は下にスクロールします。

また、画像がパネルよりも大きい場合があるため、垂直スクロールバーが表示されることに注意する必要があります。したがって、マウスホイールを使用するときは、マウスホイールが下部にあることを確認する必要があります。

前もって感謝します。

4

2 に答える 2

0

MouseWheelEvent を使用して、スクロール時にイベント ハンドラーを追加し、e.Delta を確認できます

e.delta が正の場合は上にスクロールされ、負の場合は下にスクロールされ、表示される画像インデックスが増減されます。

それは理にかなっていますか/あなたの質問に答えますか?

于 2012-08-01T18:27:14.820 に答える
0

これに対する解決策を見つけました

1) 以前の垂直スクロール値 (prevVScrollVal) を格納する新しい変数を作成しました。
2) 新しい MouseEventHandler を作成する

this.imageContainer.MouseWheel += new MouseEventHandler(this.imageContainer_MouseWheel);

3) マウス イベント ハンドラで、e.delta を見て上か下かを識別し、前のスクロール値が同じかどうかを確認し、それに応じて画像を切り替えます。

    private void imageContainer_MouseWheel(object sender, MouseEventArgs e)
    {
        if (e.Delta > 0)
        {
            imageContainer_MouseWheelScrollUp(sender, e);
        }
        else if (e.Delta < 0)
        {
            imageContainer_MouseWheelScrollDown(sender, e);
        }

        prevVScrollVal = imageContainer.VerticalScroll.Value;
    }

    private void imageContainer_MouseWheelScrollUp(object sender, MouseEventArgs e)
    {
        if (imageContainer.VerticalScroll.Value == 0 && 
            prevVScrollVal == 0 && 
            current > 1)
        {
            setPagePrev();
        }
    }

    private void imageContainer_MouseWheelScrollDown(object sender, MouseEventArgs e)
    {

        if (imageContainer.VerticalScroll.Value == prevVScrollVal && 
                current < endPage)
        {
            setPageNext();
        }
    }

    /// <summary>
    /// Sets the page to the Next
    /// </summary>
    private void setPageNext()
    {
        setPage(current + 1);
    }

    /// <summary>
    /// Sets the page to the Previous
    /// </summary>
    private void setPagePrev()
    {
        setPage(current - 1);
        prevVScrollVal = imageContainer.VerticalScroll.Maximum;
        imageContainer.VerticalScroll.Value = imageContainer.VerticalScroll.Maximum;
        imageContainer.PerformLayout();
    }
    /// <summary>
    /// Sets the page to be viewed
    /// </summary>
    /// <param name="page">page to be viewed</param>
    public void setPage(int page)
    {  ....  }
于 2012-09-20T15:06:11.193 に答える