Как вызвать обработчик события из другого события, C # - PullRequest
4 голосов
/ 30 марта 2012

Итак, у меня есть форма, в которой я хочу изменить положение трекбара и вызвать событие 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 голосов
/ 30 марта 2012

Попробуйте позвонить напрямую. Вам просто нужно указать параметры самостоятельно:

trackBar1_Scroll(trackBar1, EventArgs.Empty);

или просто

trackBar1_Scroll(null, null);

если параметры не используются.

5 голосов
/ 30 марта 2012

Другой подход, который вы могли бы использовать, кроме ответа @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(...);
}

Это всегда похоже на Запах кода для меня, когда вы вызываете обработчик событий с пустыми параметрами, просто для выполнения кода, который вы могли бы иначе абстрагировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...