web-dev-qa-db-ja.com

マウスホイールを使用してパネルをスクロールするにはどうすればよいですか?

AutoScrollをtrueに設定したフォーム上のパネルがあり、スクロールバーが自動的に表示されます。

ユーザーがマウスホイールを使用してパネルをスクロールできるようにするにはどうすればよいですか?どうもありがとう。

38
Sergio Tapia

パネルまたはパネル内のコントロールにフォーカスが必要です。フォーカスのあるコントロールにスクロールバーがある場合、パネルの代わりにスクロールすることに注意してください。

28
Jon B

私のために働いたのは、panel1_MouseEnter EventHandler:

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}
56
beam022

以下のコードは私のために働く.....

    Public Form
{
InitializeComponent();  
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);
}

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }
16
Nivas

デザイナファイルでは、次のコード行を追加できます。 MouseWheelイベントは、[プロパティ]ウィンドウの[イベント]リストに表示されません。

this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);

Panel1_MouseWheelは、マウスのウィールを回転させるとトリガーされます

.csファイルにコードを追加します

2
Pavan Navali

パネルにフォーカスがあることを確認してください。そして、これはパネルのスクロールバーをスクロールする簡単なコードです。この助けを願っています。 :) ここにコードを入力してください

        if(e.Delta > 0)
        {

            if (pnlContain.VerticalScroll.Value - 2 >= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value -= 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
        }
        else
        {
            if (pnlContain.VerticalScroll.Value + 2 <= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value += 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
        }
2

私はBorderStyleをnoneに設定したWindowsフォームを使用していますが、パネルを使用してすべてのコントロールを入れるので、見た目はいいです(色の違いなど)。

私は何を忘れましたか:

   public myForm()
   {
        InitializeComponent();
        this.DoubleBuffered = true;
   }

DoubleBufferedは魔法のようです。

1
CularBytes

スクロールホイールを動かすと、コントロールのMouseMoveイベントがトリガーされます。 MouseEventArgs引数には、Deltaという名前のプロパティがあります。これは、マウスホイールが移動したノッチの(符号付き)数を示します。このプロパティを使用して、パネルをスクロールできます。

0
MusiGenesis

Beam022によって提供された solution (上記を参照)は、私にとっては機能しましたが、他の多くのソリューションは機能しませんでした。私の場合、mousewheelイベントでDataGridViewコントロールをスクロールしようとしました。

DataGridView_MouseWheelイベントハンドラーが呼び出されていましたが、FirstDisplayedScrollingRowIndex値は変更されませんでした。値は、明示的に1に設定した後でも常に「0」でした。これは、プロパティが読み取り専用であるかのようです。

.Net Framework 4.6でもまだ再現しています。

0
GrayDwarf

私の場合、パネルのクライアント領域全体がUserControlsで占められていました(スクロールバーを除いて、内部領域の単一ピクセルは表示されていません)。

この場合、パネルはマウスイベントを取得せず、フォーカスを移動しません(スクロールバーをクリックしても「パネル内にいる」とは見なされません)。

UserControl派生クラスのコンストラクターに次の行を追加する必要がありました。

MouseEnter += delegate {
   Parent?.Focus();
};

UserControlsにはスクロール可能なコンテンツがないため、正常に動作します。

0