如何从另一个事件中触发事件处理程序,C#

4

我有一个表单,想要在单击标签后更改滑动条的位置并触发trackbar_scroll事件。 目前为止,单击标签会更改滑动条的值,这很容易:

        private void label4_Click(object sender, EventArgs e)
        {
            trackBar1.Value = 0;
        }
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            if (trackBar1.Value == 0)
            {
                try
                {
                    //code...
                }
                catch
                {
                    MessageBox.Show("Error occured");
                }
            }
        }

如何在标签点击事件中调用trackBar1_scroll(..)事件?
2个回答

9

尝试直接调用它。只需自己提供参数:

trackBar1_Scroll(trackBar1, EventArgs.Empty);

或者简单地说
trackBar1_Scroll(null, null);

如果参数没有被使用。

6

除了@LarsTech的答案(完全正确)之外,您可以采取另一种方法,即重构代码以减少提供空参数的需要。 由于您实际上没有使用EventArgs或直接引用sender,因此在上面的示例中,您可以执行以下操作:

private void DoSomething(int value)
{
   ...
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
   DoSomething(trackBar1.Value);
}

private void label4_Click(object sender, EventArgs e)
{
   DoSomething(...);
}

当你用空参数调用事件处理程序,仅为了执行可以抽象出来的代码时,我总觉得这是一种代码异味


当编写代码时,我的实际做法更接近于你的答案而不是我自己的答案。 - LarsTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接