Eventhandler für Benutzersteuerelement

23/01/2008 - 02:05 von Helmut Röser | Report spam
Hallo zusammen,
ich hab da glaub ein grösseres Problem. Also ich hab ein
Benutzersteuerelement (ascx File - alles ist VB.Net) erstellt. Im
dazugehörenden CodeFile erstelle ich TextBoxen und Button Elemente. Binde ich
das Steuerelement ein - funktioniert das wie gewünscht.
Nun möchte ich gern einen Eventhandler für den generierten Button
hinzufügen. Da liegt es ja auf der Hand die im Code File des ascx Files zu
tun. Hier kann ich aber über AddHandler Dialog1SaveButton1.Click, AddressOf
CreateNewSite nur eine Sub ansprechen welche sich ebenfalls im Code File
befindet. Dies kann ich aber nicht brauchen, denn ich kann der Sub welche ja
so aussehen muss

Sub CreateNewSite(ByVal sender As Object, ByVal e As EventArgs)
...
End Sub

keine Werte übergeben. Weiterhin benötige ich Werte welche nur auf der Seite
mit dem geladenen Benutzersteuerelement verfügbar sind. Kann ich hier auch
eine Sub angeben welche sich im Code File meiner Default.aspx Datei befindet?

Da ich hier nicht weiterkomme, hab ich mir gedacht lasse ich den AddHandler
Eintrag hier weg und mache das dann im Code File der Default.aspx. Da sich
der Button in einem Content Template befindet, muss ich diesen erst finden.
Aus diesem Grund hab ich dann folgendes eingetragen:

Dim newEditSiteSaveButton As Button =
CType(nwrEditSite.Controls(0).FindControl("btSave"), Button)
AddHandler newEditSiteSaveButton.Click, AddressOf CreateNewSite

Hier ist es mir aber nicht möglich den Button zu finden. Es wird immer ein
nicht existierendes Object bemàngelt.
Ich bin mit meinem Talent absolut am Ende. Vielleicht kann mir jemand
weiterhelfen.

Gruss Helmut
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
23/01/2008 - 08:20 | Warnen spam
Hallo Helmut,

"Helmut Röser" schrieb:

Nun möchte ich gern einen Eventhandler fà¼r den generierten Button
hinzufà¼gen. Da liegt es ja auf der Hand die im Code File des ascx Files zu
tun.



wenn Du den Event in der Webform abfangen willst, erstell dir ein eigenes
Event für dein Usercontrol und fang den in der Webform ab. Im Click Handler
des Buttons wird dann eben dieses Event gezündet.

[Control.ascx.vb]
Public Event ButtonXClicked( ByVal sender As Object, ByVal e As System.EventArgs )

Protected Sub <Button>_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles <Button>.SelectedIndexChanged
RaiseEvent ButtonXClicked( sender, e )
End Sub

[Webform.aspx.vb]
Protected Sub <ControlId>_ButtonXClicked(ByVal sender As Object, ByVal e As System.EventArgs)Handles <ControlId>.ButtonXClicked
...
End Sub

Weiterhin benötige ich Werte welche nur auf der Seite
mit dem geladenen Benutzersteuerelement verfà¼gbar sind. Kann ich hier auch
eine Sub angeben welche sich im Code File meiner Default.aspx Datei befindet?



Je nachdem, welche Werte das sind und wann die im Control zur Verfügung stehen
müssen, kannst Du die entweder im Konstruktor übergeben oder über Eigenschaften
ins Control übergeben. Alternativ kannst Du auch in der Webform entsprechende
Eigenschaften hinterlegen, auf die man dann im Usercontrol zugreifen kann.

[Control.ascx.vb]
Private _Abc As String

Public Property Abc() As String
Get
Return _Abc
End Get
Set
_Abc = Value
End Set
End Property

[Webform.aspx.vb]
<ControlId>.Abc = "Hallo Welt"

Obiges geht dann auch umgekehrt, also in der Webform die Eigenschaft deklarieren
und aus dem Control heraus darauf zugreifen:

[Control.ascx.vb]
<Variable> = CType( Me.Parent, <TypDerWebform> ).Abc

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen