繁体   English   中英

如何使用 ZedGraph 限制 X 轴上的平移?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM