2010-03-05 61 views

Trả lời

28
btnTest_Click(null, null); 

Với điều kiện là phương pháp này là không sử dụng một trong các thông số này (đó là rất phổ biến không.)

Thành thật mà nói mặc dù đây là icky. Nếu bạn có mã mà cần phải được gọi là bạn nên làm theo quy ước sau:

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

protected void SomeOtherFunctionThatNeedsToCallTheCode() 
{ 
    SomeSub(); 
} 

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

-1, quá nhiều mã. – AMissico

+14

Không. Không quá nhiều mã. Bạn không nên sử dụng phương thức cho cả cuộc gọi và sự kiện. Nó gây hiểu lầm và khó hiểu. –

+0

Bạn xử lý ngoại lệ ở đâu? Trong cả ba phương pháp? Tại sao tạo phương thức chỉ để gọi một phương thức? Không khó hiểu. Buttton_Click (null, null) là hiển nhiên. SomeOtherFunctionThatNeedsToCallTheCode không có ý nghĩa với tôi. – AMissico

0

btnTest_Click (đối tượng mới(), EventArgs.Empty)

+1

truyền một đối tượng chung chung có vẻ như là một ý tưởng tồi. tốt hơn để vượt qua nút hoặc null. –

+0

@John Tại sao bạn cảm thấy như vậy? –

+0

vì người gửi thường là kiểm soát, vì vậy nếu trình xử lý nhấp chuột sử dụng nó, nó sẽ trông đợi rằng 'người gửi dưới dạng Điều khiển' sẽ hoạt động. –

0

Bạn có thể gọi btnTest_Click giống như bất kỳ chức năng khác.

Các hình thức cơ bản nhất sẽ là:

btnTest_Click(this, null); 
4

Nếu phương pháp này là không sử dụng một trong hai sender hoặc e bạn thể gọi:

btnTest_Click(null, null); 

gì có lẽ bạn nên xem xét việc làm là trích xuất mã từ bên trong phương thức đó thành phương thức riêng của nó, mà bạn có thể gọi từ cả trình xử lý sự kiện nhấn nút và bất kỳ vị trí nào khác trong mã mà chức năng được yêu cầu.

2

Nó chỉ là một phương pháp trên biểu mẫu của bạn, bạn có thể gọi nó giống như bất kỳ phương pháp nào khác. Bạn chỉ cần có để tạo ra một EventArgs đối tượng để vượt qua nó, (và vượt qua nó tay cầm của nút như sender)

18

Sử dụng

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

' EventArgs.Empty'? – Tanzelax

+3

EventArgs.Empty là tĩnh của EventArgs mới(). Vì vậy EventArgs.Empty thích hợp hơn, nhưng việc tạo mới gần như là tốt. – AMissico

2

Đơn giản chỉ cần gọi

btnTest_Click (null, null);

Chỉ cần đảm bảo bạn không cố gắng sử dụng một trong các thông số đó trong hàm.

1

Bên trong nút đầu tiên gọi sự kiện nút thứ hai (ImageButton) sự kiện:

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

bạn có thể sử dụng trạng thái nút như CommandArgument của ImageButton nếu bạn tiết kiệm một cái gì đó vào nó.

6

Tất cả các phương pháp trên đều không tốt vì bạn có thể thay đổi tên hàm sự kiện. Cách dễ nhất là:

btnTest.PerfromClick();

5

Bạn có thể sử dụng phản chiếu để gọi phương thức OnClick sẽ kích hoạt trình xử lý sự kiện nhấp chuột.

Tôi cảm thấy chán khi đăng bài này nhưng nó hoạt động ...

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

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty }); 
-1
btnTest.Click +=new EventHandler(btnTest_Click) 
Các vấn đề liên quan