从按钮单击选择mschchart扩展工具

本文关键字:扩展 工具 mschchart 选择 按钮 单击 | 更新日期: 2023-09-27 18:15:27

我使用的是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;
        }
    }
}

这将成功地从集合中选择工具。然而,我在SetChartControlState方法中得到了System.ArgumentNullException。我已经完成了代码,我看到当应用程序进入ChartContext_ItemClicked时,发送方的源代码控制为空。我翻遍了MSDN,发现了这个

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

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

从按钮单击选择mschchart扩展工具

我明白了。将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
}

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