从鼠标滚轮事件获取滚动条位置
Getting Scrollbar position from Mouse wheel event
我有一个 winform 面板。我想为面板捕获滚动和鼠标滚轮事件。对于这两种情况,我都想检查滚动条的位置。
当滚动条位于底部(滚动结束...)时,控件应触发事件。
我已经为 Panel.Scroll 这样做了:
private void Panel1_Scroll(object sender, ScrollEventArgs e)
{
if (e.NewValue == Panel1.VerticalScroll.Maximum - Panel1.VerticalScroll.LargeChange+1)
{
//do some operation
}
}
但是对于 MouseEventArgs 没有值 (e.newvalue) 来指示滚动条位置。
如何从鼠标滚轮事件中获取滚动条的位置?
另外根据我的要求,两个事件调用具有相同的逻辑实现,所以我想写一次逻辑。
我怎样才能做到这一点?
试试你VerticalScroll
属性Panel
.
void MouseWheel(object sender, MouseEventArgs e)
{
if (_panel.VerticalScroll.Value > _panel.VerticalScroll.Maximum - _panel.VerticalScroll.LargeChange)
MessageBox.Show("Bottom");
}
经过进一步分析,我发现 panel1.VerticalScroll.Value
相当于 ScrollEventArgs
的 e.NewValue
。
因此,为了代码的可重用性,可以使用以下代码:
private void panel1_Scroll(object sender, ScrollEventArgs e)
{
panel1_scrollcheck(e.NewValue);
}
private void panel1_MouseWheel(object sender, MouseEventArgs e)
{
panel1_scrollcheck(panel1.VerticalScroll.Value);
}
private void panel1_scrollcheck(int currPos)
{
if (currPos == panel1.VerticalScroll.Maximum - panel1.VerticalScroll.LargeChange+1)
{
//Put the logic here
}
}
我有一个 winform 面板。我想为面板捕获滚动和鼠标滚轮事件。对于这两种情况,我都想检查滚动条的位置。
当滚动条位于底部(滚动结束...)时,控件应触发事件。
我已经为 Panel.Scroll 这样做了:
private void Panel1_Scroll(object sender, ScrollEventArgs e)
{
if (e.NewValue == Panel1.VerticalScroll.Maximum - Panel1.VerticalScroll.LargeChange+1)
{
//do some operation
}
}
但是对于 MouseEventArgs 没有值 (e.newvalue) 来指示滚动条位置。
如何从鼠标滚轮事件中获取滚动条的位置?
另外根据我的要求,两个事件调用具有相同的逻辑实现,所以我想写一次逻辑。
我怎样才能做到这一点?
试试你VerticalScroll
属性Panel
.
void MouseWheel(object sender, MouseEventArgs e)
{
if (_panel.VerticalScroll.Value > _panel.VerticalScroll.Maximum - _panel.VerticalScroll.LargeChange)
MessageBox.Show("Bottom");
}
经过进一步分析,我发现 panel1.VerticalScroll.Value
相当于 ScrollEventArgs
的 e.NewValue
。
因此,为了代码的可重用性,可以使用以下代码:
private void panel1_Scroll(object sender, ScrollEventArgs e)
{
panel1_scrollcheck(e.NewValue);
}
private void panel1_MouseWheel(object sender, MouseEventArgs e)
{
panel1_scrollcheck(panel1.VerticalScroll.Value);
}
private void panel1_scrollcheck(int currPos)
{
if (currPos == panel1.VerticalScroll.Maximum - panel1.VerticalScroll.LargeChange+1)
{
//Put the logic here
}
}