分配右键点击菜单,我的图表上每一个人的一点

问题描述 投票:1回答:1

这是我到目前为止并正常工作:

一个RangeBar图有两个系列,我用点填在运行时,基于一个Oracle查询的结果。每个点表示与多个属性的数据对象。

我想补充的情况是以下几点:

对于我的图表上每个可见点,我希望用户能够用右键单击以打开一个菜单,多种选择的点。这些选项应该调用某些functioncalls,与用作在functioncall一个参数所选择的点的属性。在此函数中,然后,一个新的窗口将被打开,将显示基于由所述点与被点击的菜单项所表示的数据对象的某些信息。

有什么我想这么远?我开始鬼混基于本主题中的信息将ContextMenu:Adding a right click menu to an item

ContextMenu cm = new System.Windows.Forms.ContextMenu();
cm.MenuItems.Add("Item 1", new EventHandler(Item1_Click));

但令我失望的是,我发现一个ContextMenu只能分配给我的图表对象,而我希望把它分配给我的系列个体的集合点集合:

chart.ContextMenu = cm; // This works
serie1.Points[DataObject.pointIndex].ContextMenu = cm; // This does not work unfortunately

望着分配给图表系列的收集点的资料,我发现没有提到任何种类的任何菜单的。这是否意味着什么我要找的根本不是在技术意义上是可行的还是我的东西监督?如果是的话,会不会有其他任何技术的实现,将提供我正在寻找的功能? (现在我在想工具提示可以覆盖我的一些需求,但是这不会是几乎一样优雅,也没有广泛的作为在新窗口中显示的信息)

c# winforms charts contextmenu
1个回答
2
投票

点是不是控制。但是你可以很容易地只使用一个上下文菜单中的图表上,在正确的位置打开它,并在relevanty点数据饲料。所有你需要的是在HitTestChart和鼠标位置打开ContextMenu

private void chart1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button.HasFlag(MouseButtons.Right))
    {
        var hitt = chart1.HitTest(e.X, e.Y);
        DataPoint dp = null;
        if (hitt.PointIndex >= 0)
        {
            dp = hitt.Series.Points[hitt.PointIndex];
        }

        ContextMenu cm = new System.Windows.Forms.ContextMenu();  // either reuse or dispose!
        cm.MenuItems.Add("Item 1 X:" + dp.XValue, new EventHandler(Item1_Click));
        cm.Tag = dp;
        cm.Show(chart1, e.Location);
    }
}

private void Item1_Click(object sender, EventArgs e)
{
    Console.WriteLine("Item1_Click");
    DataPoint dp = (sender as MenuItem).Parent.Tag as DataPoint;
    if  (dp != null) Console.WriteLine("Y:" + dp.YValues[0]);
}

如果饲料DataPointTagContextMenu财产。随意做自己的处理..

© www.soinside.com 2019 - 2024. All rights reserved.