Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ZedGraph限制X轴上的平移?_C#_Zedgraph - Fatal编程技术网

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

C# 如何使用ZedGraph限制X轴上的平移?,c#,zedgraph,C#,Zedgraph,很多人已经问过这个问题,但我还没有找到一个适合我的答案。我只是想让用户无法缩小/平移某个范围(在下面的示例中介于0和“大小”之间)。我通过使用ZoomEvent并手动设置最大值和最小值来限制缩放,但我不知道如何对平移执行相同的操作。下面是一些代码: int size = 40000; graphControl.ZoomEvent += GraphControl_ZoomEvent; graphControl.Scroll += GraphControl_Scroll; graphControl.

很多人已经问过这个问题,但我还没有找到一个适合我的答案。我只是想让用户无法缩小/平移某个范围(在下面的示例中介于0和“大小”之间)。我通过使用ZoomEvent并手动设置最大值和最小值来限制缩放,但我不知道如何对平移执行相同的操作。下面是一些代码:

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();
}
int size=40000;
graphControl.ZoomEvent+=graphControl\u ZoomEvent;
graphControl.Scroll+=graphControl\u滚动;
graphControl.ScrollEvent+=graphControl\u滚动;
私有无效图形控制滚动(对象发送方,滚动事件参数)
{
if(graphControl.MasterPane.PaneList[0].XAxis.Scale.Max>size)
graphControl.MasterPane.PaneList[0].XAxis.Scale.Max=size;
if(graphControl.MasterPane.panelister[0].XAxis.Scale.Min<0)
graphControl.MasterPane.PaneList[0].XAxis.Scale.Min=0;
graphControl.MasterPane.AxisChange();
graphControl.Refresh();
}
私有void GraphControl_ZoomEvent(ZedGraphControl发送方、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();
}
上面的代码几乎可以做到这一点,但最小值和最大值只有在我松开平移按钮后才会更新,我想随时限制它(包括在平移过程中)。我还认为值得一提的是,Scroll事件根本没有启动


提前谢谢你

订阅MouseMoveEvent并使用与ZoomeEvent中相同的代码

此外,仅当按下平移鼠标按钮(中间)或Ctrl和鼠标左键时才执行此操作。如果限制最小边,如果不想更改X轴的比例,则还必须设置最大边以保持相同的轴跨度

在下面的例子中,我只限制了一面。返回false以允许执行其他操作(平移)

double limit=0;
双跨;
专用布尔图形控制\u MouseMoveEvent(ZedGraphControl发送器,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<极限)
{
graphControl.GraphPane.XAxis.Scale.Min=极限;
graphControl.GraphPane.XAxis.Scale.Max=极限+跨度;
}
}
返回false;
}

订阅MouseMoveEvent并使用与ZoomeEvent相同的代码

此外,仅当按下平移鼠标按钮(中间)或Ctrl和鼠标左键时才执行此操作。如果限制最小边,如果不想更改X轴的比例,则还必须设置最大边以保持相同的轴跨度

在下面的例子中,我只限制了一面。返回false以允许执行其他操作(平移)

double limit=0;
双跨;
专用布尔图形控制\u MouseMoveEvent(ZedGraphControl发送器,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<极限)
{
graphControl.GraphPane.XAxis.Scale.Min=极限;
graphControl.GraphPane.XAxis.Scale.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;
    }