[英]How to limit panning on the X Axis with ZedGraph?
很多人已经问过这个问题,但我还没有找到适合我的答案。 我只是想让用户无法缩小/平移超出某个范围(在下面的示例中介于 0 和“大小”之间)。 我设法通过使用 ZoomEvent 并手动设置 Max 和 Min 值来限制缩放,但我不知道如何对平移执行相同的操作。 这是一些代码:
int size = 40000;
graphControl.ZoomEvent += GraphControl_ZoomEvent;
graphControl.Scroll += GraphControl_Scroll;
graphControl.ScrollEvent += GraphControl_Scroll;
private void GraphControl_Scroll(object sender, ScrollEventArgs e)
{
if (graphControl.MasterPane.PaneList[0].XAxis.Scale.Max > size)
graphControl.MasterPane.PaneList[0].XAxis.Scale.Max = size;
if (graphControl.MasterPane.PaneList[0].XAxis.Scale.Min < 0)
graphControl.MasterPane.PaneList[0].XAxis.Scale.Min = 0;
graphControl.MasterPane.AxisChange();
graphControl.Refresh();
}
private void GraphControl_ZoomEvent(ZedGraphControl sender, ZoomState oldState, ZoomState newState)
{
if (sender.MasterPane.PaneList[0].XAxis.Scale.Max > size)
sender.MasterPane.PaneList[0].XAxis.Scale.Max = size;
if (sender.MasterPane.PaneList[0].XAxis.Scale.Min < 0)
sender.MasterPane.PaneList[0].XAxis.Scale.Min = 0;
sender.MasterPane.AxisChange();
sender.Refresh();
}
上面的代码几乎做到了,但是 Min 和 Max 值只有在我松开平移按钮后才会更新,我想一直限制它(包括在平移期间)。 我还认为值得一提的是 Scroll 事件根本没有触发。
先感谢您!
订阅 MouseMoveEvent 并使用与 ZoomEvent 相同的代码。
此外,只有在按下平移鼠标按钮(中间)(或 Ctrl 和鼠标左键)时才执行此操作。 如果您限制 Min 边,如果您不想更改 XAxis 的比例,则还必须设置 Max 边以保持相同的轴跨度。
在下面的这个例子中,我只限制了一侧。 返回 false 以允许执行其他操作(平移)。
double limit = 0;
double span;
private bool GraphControl_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Middle || (e.Button == MouseButtons.Left && (ModifierKeys & Keys.Control) == Keys.Control))
{
span = graphControl.GraphPane.XAxis.Scale.Max - graphControl.GraphPane.XAxis.Scale.Min;
if (graphControl.GraphPane.XAxis.Scale.Min < limit)
{
graphControl.GraphPane.XAxis.Scale.Min = limit;
graphControl.GraphPane.XAxis.Scale.Max = limit + span;
}
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.