2010-04-07 111 views
6

我試圖瞭解用戶控件。我創建了一個具有文本框和按鈕的用戶控件。我希望能夠做的是當我點擊用戶控件中的按鈕時,在aspx頁面中填充一個標籤。我明白,我可以只在頁面上使用用戶控件上的一些屬性來獲取該信息的按鈕..但我想知道如何使用用戶控件按鈕來做到這一點。原因是該按鈕只是一個例子..一個學習工具。如果我可以得到這個工作,我可能會把事情放在用戶控件中,可能需要這種傳遞信息。無論如何..我發現了一些C#的例子,我試圖讓工作作爲VB ..但一旦開始進入代表和事件..好..它讓我轉到這個職位。asp.net vb用戶控件在調用頁面上引發事件

無論如何..希望有人可以伸出援助之手。

回答

17

看看this tutorial可以提供幫助。做這件事的最好方法當然是把事件連接起來,事情並不像你想象的那麼困難。基本要點有:

1.在控制類中定義的事件:

Public Event MyEvent as System.EventHandler

2.擡起你的控制類的子或函數的事件:

RaiseEvent MyEvent(Me, New EventArgs())

3.在包含您的控件的頁面上處理事件:

Protected Sub MyControl_MyEvent(ByVal sender As Object, ByVal e As EventArgs) Handles MyControl.MyEvent 
    'Do stuff here 
End Sub 
+0

感謝您的信息..想知道..因爲你有這樣一個很好和簡單的方式做它..你如何傳遞信息回來的事件..或者當事件被解僱(你的'做這裏的東西)我會從用戶控件上設置的proerty中獲取值 – jvcoach23 2010-04-07 19:35:52

+0

如果你想在事件中傳回信息,你應該改變你的「RaiseEvent」代碼以傳回除了'new EventArgs()之外的東西'。爲了簡單起見,你甚至可以傳遞一個字符串,例如:'RaiseEvent MyEvent(Me,MyString)',然後將頁面上的MyControl_MyEvent子項的第二個參數更改爲'ByVal s As String'而不是'ByVal e As EventArgs'。你可以通過任何你想要的事件。我只是使用EventArgs,因爲這是一種常用的方法(大多數人使用自己的繼承自EventArgs的類)。 – tloflin 2010-04-07 19:42:41

+0

很好..謝謝你的迴應... – jvcoach23 2010-04-07 20:16:51

1

問題是,如果您使用戶控件依賴於它的父頁面,它不再是可移植的,並且您已經打敗了首先將其設置爲usercontrol的目的。

這可能是爲什麼你正在跨越的代表和諸如此類的東西在任何實例上運行 - 人都試圖通過允許用戶控件調用傳入的方法來刪除父頁面上的依賴,而不是直接設置在標籤父頁面。

如果這只是爲了練習,最好是按下父頁面上的按鈕來設置usercontrol中的標籤,而不是其他方式。你現在做的方式不是一個好的設計,應該避免實際應用。

+0

我在考慮用戶控件的一件事..有一個多組合框,它會在幾個地方使用autosuggest ..用戶選擇的最後一個項目是我想要的值。它相當渾然一體,不想複製和粘貼那麼多的代碼或混亂。所以被thinkng用戶控制會很好。事情是,一旦選擇了這個值,我希望不必讓用戶點擊一個按鈕來將值返回到頁面......在你正在談論的內容中......你會採取什麼方法。謝謝 – jvcoach23 2010-04-07 18:27:33

2

我相信你想要做的是讓你的UserControl引發一個事件。 This MSDN article explains how to raise events並有VB示例。然後,您的頁面可以訂閱您的UserControl引發的事件並設置您需要設置的任何值。最好將一些UserControl字段(即TextBoxes等)作爲公共屬性公開,以便它們可以從訂閱的控件訪問。

相關問題