2010-03-05 2 views
20

У меня есть кнопка в моем aspx-файле, называемом btnTest. Файл .cs имеет функцию, которая вызывается при нажатии кнопки.C#: вызов метода обработчика событий кнопки без нажатия кнопки

btnTest_Click(object sender, EventArgs e) 

Как я могу вызвать эту функцию из моего кода (т. Е. Без нажатия кнопки)?

ответ

28
btnTest_Click(null, null); 

При условии, что этот метод не используется либо из этих параметров (это очень часто не.)

Чтобы быть честным, хотя это неприглядное. Если у вас есть код, который должен быть вызван, вы должны следовать следующему соглашению:

protected void btnTest_Click(object sender, EventArgs e) 
{ 
    SomeSub(); 
} 

protected void SomeOtherFunctionThatNeedsToCallTheCode() 
{ 
    SomeSub(); 
} 

protected void SomeSub() 
{ 
    // ... 
} 
+0

-1, слишком много кода. – AMissico

+14

№ Не слишком много кода. Вы не должны использовать метод как для вызова, так и для события. Это вводит в заблуждение и запутывает. –

+0

Где вы помещаете обработку исключений? Во всех трех методах? Зачем создавать методы только для вызова одного метода? Не путать. Buttton_Click (null, null) очевиден. SomeOtherFunctionThatNeedsToCallTheCode не имеет для меня никакого смысла. – AMissico

0

btnTest_Click (новый объект(), EventArgs.Empty)

+1

Прохождение общего объекта кажется плохим. лучше передать кнопку или null. –

+0

@John Почему ты так себя чувствуешь? –

+0

, потому что отправитель обычно является элементом управления, поэтому, если обработчик клика использует его вообще, он ожидает, что 'sender as Control' будет работать. –

0

Вы можете назвать btnTest_Click так же, как и любая другая функция.

Самая основная форма будет это:

btnTest_Click(this, null); 
4

Если метод не используется либо sender или e вы могли вызов:

btnTest_Click(null, null); 

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

2

Это всего лишь метод в вашей форме, вы можете называть его так же, как любой другой метод. Вы просто должны создать EventArgs объект, чтобы перейти к нему, (и передать его ручку кнопки как sender)

18

Использование

btnTest_Click(this, new EventArgs()); 
+4

' EventArgs.Empty'? – Tanzelax

+3

EventArgs.Empty является статикой нового EventArgs(). Поэтому EventArgs.Empty более уместен, но создание нового почти так же хорошо. – AMissico

2

Просто позвоните

btnTest_Click (NULL, NULL);

Просто убедитесь, что вы не пытаетесь использовать любой из этих параметров в функции.

1

Внутри первой кнопку вызова события второй кнопки (ImageButton) событий:

imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty); 

вы можете использовать состояние кнопки, такие как CommandArgument в IMAGEBUTTON, если вы что-то сохранить в него.

6

Все вышеописанные методы не подходят, потому что вы можете изменить имя функции события. Самый простой из них:

btnTest.PerfromClick();

5

Вы можете использовать отражение для вызова метода OnClick, который будет запускать обработчики событий щелчка.

Я чувствую себя грязным, размещая это, но он работает ...

MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance); 

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty }); 
-1
btnTest.Click +=new EventHandler(btnTest_Click) 
Смежные вопросы