Wie prüfen, welchen Typ "sender as Object" enthält? (Typ = Textbox oder NumericUpDown)

27/10/2007 - 17:45 von Robert Hauffe | Report spam
Hallo,

ich verdeutliche das Problem mal mit dem entsprechenden Codeschnipsel:

Private Sub machineTextBoxName_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
machineTextBoxName.TextChanged
UpdateInformationFromPanele(sender)
End Sub

Private Sub machineNumericUpDownInputBuffer_ValueChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
machineNumericUpDownInputBuffer.ValueChanged
UpdateInformationFromPanele(sender)
End Sub

Private Sub UpdateInformationFromPanele(ByVal sender As Object)
If CType(sender, ***).Focused = True And
MachineEditor1.selectedMachine IsNot Nothing Then
With MachineEditor1.selectedMachine
Select Case CType(sender, ***).Name
Case Is = "machineTextBoxName"
MachineEditor1.selectedMachine.machineName =
machineTextBoxName.Text
Case Is = "machineNumericUpDownInputBuffer"
.inputBuffer = machineNumericUpDownInputBuffer.Value
.text1 = CStr(.inputBuffer)
...

Wie man schön sieht, wird in der ersten Prozedur eine Textbox übergeben
und in der zweiten ein NumericUpDown. Das Problem ist, das CType bei den
drei Sternchen (***) entweder das Wort "Textbox" oder das Wort
"NumericUpDown" haben möchte, je nachdem was übergeben wurde.

Leider funktioniert die Object.GetType Methode nicht.

Weder

If CType(sender, sender.GetType())...

noch

Dim x As Type = sender.GetType()
If CType(sender, x)...

funktioniert. VB bemàngelt immer den zweiten Ausdruck bei
CType(Ausdruck1, Ausdruck2). Und das, obwohl sender.GetType() an sich
den richtigen Typ liefert.

Was mache ich falsch?

Robert
 

Lesen sie die antworten

#1 VBF
27/10/2007 - 18:13 | Warnen spam
Du kannst das Problem so umgehen:
If TypeOf sender Is Textbox Then ...

Bei mir (VS 2008) erscheint gleich die folgende Fehlermeldung: Error 1 Type
'sender.GetType' is not defined.

"Robert Hauffe" wrote:

Hallo,

ich verdeutliche das Problem mal mit dem entsprechenden Codeschnipsel:

Private Sub machineTextBoxName_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
machineTextBoxName.TextChanged
UpdateInformationFromPanele(sender)
End Sub

Private Sub machineNumericUpDownInputBuffer_ValueChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
machineNumericUpDownInputBuffer.ValueChanged
UpdateInformationFromPanele(sender)
End Sub

Private Sub UpdateInformationFromPanele(ByVal sender As Object)
If CType(sender, ***).Focused = True And
MachineEditor1.selectedMachine IsNot Nothing Then
With MachineEditor1.selectedMachine
Select Case CType(sender, ***).Name
Case Is = "machineTextBoxName"
MachineEditor1.selectedMachine.machineName =
machineTextBoxName.Text
Case Is = "machineNumericUpDownInputBuffer"
.inputBuffer = machineNumericUpDownInputBuffer.Value
.text1 = CStr(.inputBuffer)
...

Wie man schön sieht, wird in der ersten Prozedur eine Textbox übergeben
und in der zweiten ein NumericUpDown. Das Problem ist, das CType bei den
drei Sternchen (***) entweder das Wort "Textbox" oder das Wort
"NumericUpDown" haben möchte, je nachdem was übergeben wurde.

Leider funktioniert die Object.GetType Methode nicht.

Weder

If CType(sender, sender.GetType())...

noch

Dim x As Type = sender.GetType()
If CType(sender, x)...

funktioniert. VB bemàngelt immer den zweiten Ausdruck bei
CType(Ausdruck1, Ausdruck2). Und das, obwohl sender.GetType() an sich
den richtigen Typ liefert.

Was mache ich falsch?

Robert

Ähnliche fragen