web-dev-qa-db-ja.com

C#Windowsフォームでのパネルのスクロール

VS2010、Windows7を使用しています

たくさんの絵箱のあるパネルがあります。それは持っています

AutoScroll = true

スクロールバーは、ドラッグまたはクリックすると正しく機能します。ただし、ホイールキーと矢印キーでスクロールしたい。

ホイールがまったく応答せず(フォーカスを変更すると起動が停止するため、フォームにイベントハンドラーを追加しても機能しません)、矢印キーを使用するにはプログラムでスクロールする必要があります。私は以下を試しました:

panel3.VerticalScroll.Value = panel3.VerticalScroll.Maximum;

これは機能せず、スクロールバーはほとんど動きません。 最大何らかの理由で常に100です。

私がホイールの問題で試したこと(動作しません):

// Fires as long as i don't change focus to anything
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);

private void Panel1_MouseWheel(object sender, MouseEventArgs e)
{
    panel3.Focus();
}

ありがとうございました。

9
WoF_Angel

試すべきいくつかのこと:

Panelに最初のTabIndexプロパティを持たせます。あれは:

panel1.TabIndex = 0;

明らかに、フォーム上の他のコントロールは適切にインデックスを再作成する必要があります。

また、MouseDownイベントにフォーカスを追加してみてください。

void panel1_MouseDown(object sender, MouseEventArgs e) {
  if (!panel1.Focused)
    panel1.Focus();
}

MouseEnterを実行することもできますが、パネル上でマウスを動かすと現在のアクティブなコントロールからフォーカスが奪われるため、これは奇妙なユーザーインターフェイスになる可能性があります。

MouseWheelイベントをサブスクライブする必要はありません。スクロールバーが自動的に移動するはずです。

11
LarsTech

AutoScrollPositionプロパティを割り当てることにより、パネルをスクロールします。負の値を使用することに注意してください。

マウスホイールが機能しない理由は、パネルも画像ボックスもフォーカス可能なコントロールではないためです。パネルコントロールを少し作り直して、フォーカスできるようにする必要があります。コードは この回答 にあります。

3
Hans Passant

試してみてください

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