如何解决在这种情况下是否可以调用此事件处理程序?
我在 WinForms 中使用 C# 来使用轨迹栏,如下所示。在代码的开头我定义了事件处理程序:
this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
这是滚动轨迹栏时的实现:
private void trackBar1_Scroll(object sender,EventArgs e)
{
//do something...
}
所以这可行,但我需要从另一个事件处理程序内部调用上述函数,例如:
public void numericUpDown1_TextChanged(object sender,EventArgs e)
{
//what to do here to call trackBar1_Scroll ?
}
如何从 numericUpDown1_TextChanged 内部调用 trackBar1_Scroll?
解决方法
您通常不需要 sender
和 e
参数。因此只需创建一个无参数方法
private void DoSomething() // Hopefully with a better name
{
// do things ...
}
然后在您的事件处理程序中调用它。
private void trackBar1_Scroll(object sender,EventArgs e)
{
DoSomething();
}
public void numericUpDown1_TextChanged(object sender,EventArgs e)
{
DoSomething();
}
如果你给方法一个描述性的名字,你的代码就会变得更容易阅读。但是当然您也可以只调用其他事件处理程序。事件处理程序毕竟只是一个方法
public void numericUpDown1_TextChanged(object sender,EventArgs e)
{
trackBar1_ValueChanged(sender,e);
}
由于这两个事件处理程序具有相同的签名(相同的参数列表和返回类型),您可以声明一个并将其附加到两个控件上:
void HandleUpdates(object sender,EventArgs e)
{
// do things...
}
并分配给它
trackBar1.Scroll += HandleUpdates;
numericUpDown1.TextChanged += HandleUpdates;
您也可以在事件选项卡的属性窗口中分配它。 new System.EventHandler(...)
不是必需的。 C# 会自动为您完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。