从按钮单击中选择MSChart-Extension工具

时间:2014-07-28 14:38:05

标签: c# mschart

我正在使用MSChart-Extensions,我想要从按钮和ContextMenuStrip中选择缩放,平移和选择工具。我觉得最简单的方法是模拟来自ContextMenuStrip.Items集合

的点击

这就是我所拥有的。在我的表格中我有这个

private void zoomButton_Click(object sender, EventArgs e)
{
    this.chart.ChangeTool("Zoom");
}

MSChartExtensions.cs我有这个

public static void ChangeTool(this Chart sender, string option)
{
    Chart chart = sender;

    foreach(ToolStripItem item in chart.ContextMenuStrip.Items)
    {
        if (item.Text == option)
        {
            item.PerformClick();
            break;
        }
    }
}

这成功地从集合中选择了该工具。但是,我在System.ArgumentNullException方法中获得SetChartControlState。我已经完成了代码,我发现当应用程序进入ChartContext_ItemClicked时,发件人的源代码控制为空。我已经通过MSDN挖掘了found this

  

一个控件,表示显示快捷菜单的控件。 如果没有控件显示快捷菜单,则该属性返回空引用(在Visual Basic中为Nothing)。

所以我假设因为没有显示右键菜单(ContextMenuStrip),所以源控件为空。有没有解决的办法?我怎样才能使这个工作?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我明白了。将ChangeTools()方法更改为此

// In MSChartExtensions.cs
public static void ChangeTool(this Chart sender, string option)
{
    if (option == "Zoom")
        SetChartControlState(sender, MSChartExtensionToolState.Zoom);
    else if (option == "Select")
        SetChartControlState(sender, MSChartExtensionToolState.Select);
    else if (option == "Pan")
        SetChartControlState(sender, MSChartExtensionToolState.Pan);
    else if (option == "Zoom Out")
    {
        Chart ptrChart = sender;
        WindowMessagesNativeMethods.SuspendDrawing(ptrChart);
        ptrChart.ChartAreas[0].AxisX.ScaleView.ZoomReset();
        ptrChart.ChartAreas[0].AxisY.ScaleView.ZoomReset();
        ptrChart.ChartAreas[0].AxisY2.ScaleView.ZoomReset();
        WindowMessagesNativeMethods.ResumeDrawing(ptrChart);
    }
}

然后像我在问题中所做的那样调用此方法

// In the form
private void zoomButton_Click(object sender, EventArgs e)
{
    this.chart.ChangeTool("Zoom"); // As an example
}

如果有人有更好的方法,请随时告诉我