我以这种方式订阅活动:
s1.MouseUp += (s, e) =>
{
indexOfPointToMove = -1;
s1.LineStyle = LineStyle.Solid;
MyModel.RefreshPlot(false);
e.Handled = true;
};
Run Code Online (Sandbox Code Playgroud)
我怎么能在不同的范围内取消订阅?(但在范围内s1
)
我尝试过以下方法:
s1.MouseUp = null;
s1.MouseUp -=(s,e) =>
{
indexOfPointToMove = -1;
s1.LineStyle = LineStyle.Solid;
MyModel.RefreshPlot(false);
e.Handled = true;
};
s1.MouseUp += (s,e) =>
{
//nothing
};
Run Code Online (Sandbox Code Playgroud)
但事件还在解决,怎么办呢?
不要使用匿名事件,而是命名事件.
s1.MouseUp += Mouse_Up;
s1.MouseUp -=Mouse_Up;
void Mouse_Up(object sender, MouseEventArgs ea)
{
indexOfPointToMove = -1;
s1.LineStyle = LineStyle.Solid;
MyModel.RefreshPlot(false);
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
不要使用lambda来创建匿名事件处理程序.
s1.MouseUp += s1_MouseUp; //subscribe
s1.MouseUp -= s1_MouseUp; //ussubscribe
private void s1_MouseUp(object sender, MouseEventArgs e)
{
var s1 = (ListBox)sender; //cast it to proper object
indexOfPointToMove = -1;
s1.LineStyle = LineStyle.Solid;
MyModel.RefreshPlot(false);
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)