2016-07-17 11 views
0

Ich habe eine Kontrolle namens SuperValidator1 auf jedem Formular mit SuperValidator Typ. Ich möchte dieses Steuerelement finden und es mit seinem Namen aktivieren, da der Name in allen Formen konsistent ist. so ist dies der Code kam ich mit:Convert Control mit Cast funktioniert nicht

 Dim validator As SuperValidator 
     Dim frm As Form = Me.ParentForm 
     Dim ctrl As Control() 
     ctrl = frm.Controls.Find("SuperValidator1", True) 
     Dim singleCtrl As Control = ctrl(0) 
     validator = TryCast(singleCtrl, SuperValidator) '< ERROR LINE 

es Editor Fehler wirft: Value of Type 'Control' cannot be converted to 'SuperValidator'

ich versuchte CType und DirectCast aber es ist das gleiche. nach this sollte ich in der Lage sein, jeden Datentyp zu übertragen. was ist falsch und was soll ich tun?

btw SuperValidator ist von DevComponents.DotNetBar.Validator

dank

+3

Meine Vermutung wäre, dass SuperValidator kein Steuerelement ist, hat keine Kontrolle erben, sondern eine Komponente. – dbasnett

+1

Sie haben singleCtrl als Steuerelement definiert, aber dann versuchen, das als Validator zu werfen und das wird nicht passieren. Sie müssen den Datentyp ändern .... Sie können all dies überprüfen, indem Sie eine TypeOf-Prüfung durchführen, um sicherzustellen, dass Sie tatsächlich das richtige Steuerelement abrufen, bevor Sie es Ihrem varoable zuweisen ... – Codexer

+1

'SuperValidator' ist [** tatsächlich eine Komponente **] (http://www.devcomponents.com/kb2/?p=475). –

Antwort

1

Seit SuperValidator is a component müssen Sie es aus der Form der Komponente Sammlung erhalten. Allerdings zur Laufzeit Komponenten scheinen nicht, einen Namen zu erben, so das Finden der genauen könnte schwierig sein.

Soweit ich Ihre einzigen Optionen kennen, sind:

A) Holen Sie sich das erste SuperValidator Sie finden können, oder

B) Spiel seine Eigenschaften (wenn möglich).

Wie auch immer Sie es tun Sie durch die Me.components.Components Sammlung laufen muss:

Dim validator As SuperValidator = Nothing 

For Each component In Me.components.Components 
    If component.GetType() Is GetType(SuperValidator) Then 
     validator = DirectCast(component, SuperValidator) 
     'Perform additional property checking here if you go with Option B. 
    End If 
Next 
1

Hier ist ein Test, der eine Kontrolle verwendet ich in einem Formular haben. Ändere deine Logik leicht. Versuchen Sie es und sehen Sie, welche Ergebnisse Sie haben.

Dim validator As RichTextBox ' SuperValidator 
    Dim frm As Form = Me ' .ParentForm 
    Dim ctrl() As Control = frm.Controls.Find("RichTextBox1", True) ' ("SuperValidator1", True) 
    If ctrl.Length > 0 Then 
     validator = TryCast(ctrl(0), RichTextBox) ' , SuperValidator) < ERROR LINE 
    Else 
     Stop 
    End If