フォームにAutoScrollをtrueに設定したパネルがあるので、スクロールバーが自動的に表示されます。
ユーザーがマウスホイールを使用してパネルをスクロールできるようにするにはどうすればよいですか?ありがとうSO。
フォームにAutoScrollをtrueに設定したパネルがあるので、スクロールバーが自動的に表示されます。
ユーザーがマウスホイールを使用してパネルをスクロールできるようにするにはどうすればよいですか?ありがとうSO。
私にとってうまくいったのは、panel1_MouseEnter
EventHandlerを追加することでした。
private void panel1_MouseEnter(object sender, EventArgs e)
{
panel1.Focus();
}
パネルまたはパネル内のコントロールにフォーカスが必要です。フォーカスのあるコントロールにスクロールバーがある場合、パネルの代わりにスクロールすることに注意してください。
以下のコードは私のために働きます.....
Public Form
{
InitializeComponent();
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);
}
private void Panel1_MouseWheel(object sender, MouseEventArgs e)
{
panel1.Focus();
}
パネルにフォーカスがあることを確認してください。これは、パネルのスクロールバーをスクロールするための簡単なコードです。この助けを願っています。:) ここにコードを入力してください
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;
}
Designerファイルには、次のコード行を追加できます。MouseWheelイベントは、[プロパティ]ウィンドウの[イベント]リストで二重化されていません。
this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);
Panel1_MouseWheelは、マウスウィールを回転させるとトリガーされます
.csファイルにコードを追加します
BorderStyleがnoneに設定されたWindowsフォームを使用しています。ここでは、パネルを使用してすべてのコントロールを入力しているので、他のフォームが正常に機能しているのに、同じ問題(色の違いなど)が発生していました。
何を忘れましたか:
public myForm()
{
InitializeComponent();
this.DoubleBuffered = true;
}
DoubleBufferedは私が気づいた魔法です。
スクロールホイールを動かすと、コントロールのMouseMoveイベントがトリガーされます。MouseEventArgs引数には、Deltaという名前のプロパティがあります。これは、マウスホイールが移動したノッチの(符号付き)数を示します。このプロパティを使用して、パネルをスクロールできます。
Beam022によって提供されたソリューション(上記参照)は私のために機能しましたが、他の多くのソリューションは機能しませんでした。私の場合、mousewheelイベントを使用してDataGridViewコントロールをスクロールしようとしていました。
DataGridView_MouseWheelイベントハンドラーが呼び出されていましたが、FirstDisplayedScrollingRowIndex値は変更されませんでした。明示的に1に設定した後でも、値は常に「0」でした。これは、プロパティが読み取り専用であるかのようです。
まだ.NetFramework4.6で再現されています。
私の場合、パネルのクライアント領域全体がUserControlsによって占められていました(スクロールバーを除いて、内側の領域の1つのピクセルは表示されません)。
この場合、パネルはマウスイベントを取得せず、フォーカスを変更しません(明らかに、スクロールバーをクリックしても「パネル内にいる」とは見なされません)。
UserControl派生クラスのコンストラクターに次の行を追加する必要がありました。
MouseEnter += delegate {
Parent?.Focus();
};
UserControlsにスクロール可能なコンテンツがないため、正常に動作するようになりました。