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

fif*_*c04 4 c# event-handling winforms

所以我有一个表单,我想改变轨迹栏的位置,并在点击标签后触发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");
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

如何从标签点击中调用trackBar1_scroll(..)事件?

Lar*_*ech 9

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

trackBar1_Scroll(trackBar1, EventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)

或者干脆

trackBar1_Scroll(null, null);
Run Code Online (Sandbox Code Playgroud)

如果没有使用参数.


Geo*_*ton 5

除了@LarsTech答案(绝对正确)之外,您可以采取的另一种方法是重构代码以减少提供空参数的需要.由于您实际上并未直接使用EventArgs或直接引用发件人,因此您可以执行以下操作:

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(...);
}
Run Code Online (Sandbox Code Playgroud)

当你用一个空参数调用一个事件处理程序时,它总是感觉像代码味道,只是执行你可以抽象出来的代码.