我正在使用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
),所以源控件为空。有没有解决的办法?我怎样才能使这个工作?谢谢你的帮助
答案 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
}
如果有人有更好的方法,请随时告诉我