У меня есть панель в моей форме с параметром 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();
}
В файле конструктора вы можете добавить следующую строку кода. событие MouseWheel не выполняется в списке событий в окне "Свойства".
this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);
Panel1_MouseWheel будет срабатывать при скатывании мыши.
Добавьте код в файл .cs
Убедитесь, что ваша панель имеет фокус. И это простой код для прокрутки панели прокрутки панели. Надеюсь, эта помощь.:) введите код здесь
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;
}
Я использую форму окна с BorderStyle, которой нет ни одного, где я использую панель, чтобы иметь все мои элементы управления, поэтому она выглядит красиво (разница в цвете и т.д.) имела ту же проблему, в то время как у меня были другие формы, работал нормально.
Что я забыл:
public myForm()
{
InitializeComponent();
this.DoubleBuffered = true;
}
DoubleBuffered волшебный, я заметил.
Перемещение колеса прокрутки должно запускать событие MouseMove управления. Аргумент MouseEventArgs имеет свойство с именем Delta, которое дает (подписанное) количество выемок, которые перемещало колесо мыши. Вы можете использовать это свойство для прокрутки панели.
Решение (см. выше), предоставленное Beam022, работало для меня, в то время как многие другие решения этого не сделали. В моем случае я пытался прокрутить элемент управления DataGridView с помощью события mousewheel.
Вызывается обработчик событий DataGridView_MouseWheel, но значение FirstDisplayedScrollingRowIndex никогда не изменялось. Значение всегда было "0" даже после того, как явным образом установил его равным 1. Как будто свойство было только для чтения.
Все еще воспроизводится в .Net Framework 4.6.