从按钮单击选择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
),所以源代码控制为空。有办法解决这个问题吗?我怎样才能使它工作?谢谢你的帮助
我明白了。将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
}
如果有人有更好的方法,请告诉我