【发布时间】:2021-10-02 22:09:48
【问题描述】:
我正在尝试制作一个可滚动的面板,但没有滚动条,并通过鼠标垂直拖动来滚动......这是迄今为止有人帮助我做的事情......:
private void panel1_MouseEnter(object sender, EventArgs e)
{
panel1.AutoScroll = false;
}
private int ValidateChange(int change)
{
var padding = -1;
if (change < 0)
{
var max = (from Control control in Controls select control.Top + control.Height + padding).Concat(new[] { int.MinValue }).Max();
if (max < Height + Math.Abs(change))
{
return Height - max;
}
}
else
{
var min = (from Control control in Controls select control.Top).Concat(new[] { int.MaxValue }).Min();
if (min > padding - Math.Abs(change))
{
return padding - min;
}
}
return change;
}
private void HandleDelta(int delta)
{
var change = ValidateChange(delta);
foreach (Control control in Controls)
{
control.Top += change;
}
}
private void panel1_MouseWheel(object sender, MouseEventArgs e)
{
HandleDelta(e.Delta);
base.OnMouseWheel(e);
}
private Point _mouseLastPosition;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
_mouseLastPosition = e.Location;
}
base.OnMouseDown(e);
}
public void panel1_MouseMove(object sender, MouseEventArgs e)
{
if ((MouseButtons & MouseButtons.Left) != 0)
{
var delta = e.Y - _mouseLastPosition.Y;
HandleDelta(delta);
_mouseLastPosition = e.Location;
}
base.OnMouseMove(e);
}
但它走得太快了..
编辑:鼠标拖动看起来有点奇怪我不知道为什么,当我尝试使用鼠标滚轮时,它会出错并给我这个错误:在 System.Core.dll 中发生了“System.StackOverflowException”类型的未处理异常线var max = (from Control control in Controls select control.Top + control.Height + padding).Concat(new[] { int.MinValue }).Max();
【问题讨论】: