38

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

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

4

9 に答える 9

59

私にとってうまくいったのは、panel1_MouseEnterEventHandlerを追加することでした。

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}
于 2012-01-31T20:52:07.480 に答える
30

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

于 2009-10-21T13:10:43.927 に答える
16

以下のコードは私のために働きます.....

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

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }
于 2011-01-22T05:58:00.440 に答える
3

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

int deltaScroll = 10;

if (e.Delta > 0)
{

    if (pnlContain.VerticalScroll.Value - deltaScroll >= pnlContain.VerticalScroll.Minimum)
        pnlContain.VerticalScroll.Value -= deltaScroll;
    else
        pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
}
else
{
    if (pnlContain.VerticalScroll.Value + deltaScroll <= pnlContain.VerticalScroll.Maximum)
        pnlContain.VerticalScroll.Value += deltaScroll;
    else
        pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
}
于 2013-06-25T14:31:28.557 に答える
2

Designerファイルには、次のコード行を追加できます。MouseWheelイベントは、[プロパティ]ウィンドウの[イベント]リストで二重化されていません。

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

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

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

于 2009-12-08T05:14:33.213 に答える
1

BorderStyleがnoneに設定されたWindowsフォームを使用しています。ここでは、パネルを使用してすべてのコントロールを入力しているので、他のフォームが正常に機能しているのに、同じ問題(色の違いなど)が発生していました。

何を忘れましたか:

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

DoubleBufferedは私が気づいた魔法です。

于 2014-12-24T19:26:02.253 に答える
0

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

于 2009-10-21T13:14:44.547 に答える
0

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

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

まだ.NetFramework4.6で再現されています。

于 2015-08-05T23:17:43.620 に答える
0

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

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

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

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

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

于 2018-01-23T02:49:50.330 に答える