0

想以编程方式创建一个 selectionRangeChanged 事件,但并没有真正了解如何去做

在此处输入图像描述

 private void btn_10D_Click(object sender, EventArgs e)
    {
        double varRange = 10;
        double var_Sel1 = DatesX[0].ToOADate();

        Chart1.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = true;
        Chart1.ChartAreas["ChartArea1"].CursorX.IsUserSelectionEnabled = true;
        Chart1.ChartAreas["ChartArea1"].CursorX.SelectionColor = Color.LightGray;
        Chart1.ChartAreas["ChartArea1"].CursorX.SelectionStart = var_Sel1;
        Chart1.ChartAreas["ChartArea1"].CursorX.SelectionEnd = varRange + var_Sel1;
        Chart1.ChartAreas["ChartArea1"].CursorX.Position = varRange + var_Sel1;
        Chart1.SelectionRangeChanged += new EventHandler<CursorEventArgs>(Chart1_SelectionRangeChanged);

    }

    void Chart1_SelectionRangeChanged(object sender, CursorEventArgs e)
    {
        throw new NotImplementedException();
    }

谢谢你

4

1 回答 1

1

对于 C# 中的所有事件,如果类创建者没有做出额外的努力来允许在类之外触发事件,那么就不可能触发它们。

根据 MSDN

Chart.SelectionRangeChanged 事件 在选择的开始位置或结束位置更改时发生。

但是从我的测试中我可以看到它只有在用户而不是程序更改时才会被触发。

如果我正确理解您的意图,您想要处理图表下的那些小按钮,btn_10D_Click方法是其中一个的点击处理程序。尝试移动这条线

Chart1.SelectionRangeChanged += new EventHandler<CursorEventArgs>(Chart1_SelectionRangeChanged);

到您的构造函数并确保它被调用一次(从其他处理程序中删除它)。这将确保在用户更改选择时执行您的代码。如果您想为您的按钮执行相同的代码,您应该简单地将处理程序内容提取到方法并将其称为表单按钮单击处理程序。

void Chart1_SelectionRangeChanged(object sender, CursorEventArgs e)
{
    DoSomething(/*some arguments if you need them*/);
}
private void btn_10D_Click(object sender, EventArgs e)
{
     \\your code
     DoSomething();
 }
于 2012-07-09T06:55:55.940 回答