none
VSTO-Addin Form Textbox-Array in Schleife RRS feed

  • Frage

  • Hallo zusammen,

    Das hier ist mein erstes Excel-Addin und ich bin nur Ingenieur, kein Softwareschmied, daher bitte um Nachsicht...

    Ich habe vor längerer Zeit mit VS2012 eine Windows-Form programmiert, in der viele Werte in Combo- und Textboxen eingegeben werden und die Werte dann an verschiedene Arrays zurückgeliefert werden. Dies funktionierte auch wunschgemäss und auch jetzt noch:

    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click

            Dim tbOk(15) As String
            For i As Integer = 0 To 15
                tbOk(i) = DirectCast(Me.Controls("tb" & i), TextBox).Text
                If tbOk(i) = Nothing Then
                    tbOk(i) = ""
                End If
            Next

            Dim cbOK(5) As String
            For j As Integer = 0 To 5
                Dim cbAccept As ComboBox = DirectCast(Me.Controls("cb" & j), ComboBox)
                cbOK(j) = cbAccept.SelectedItem
                If cbOK(j) = Nothing Then
                    cbOK(j) = ""
                Else : cbOK(j) = cbAccept.SelectedItem.ToString()
                End If
            Next

    ...

    Ich schreibe gerade etwas ähliches, nur in einem VSTO-Plugin. Hier will das Ganze aber nicht... Als Fehler kommt: BC30002 - Type Textbox/Combobox is not defined.

    Liegt es an der Position des Codes? Der Schnipsel wurde in "Form.vb" erstellt und die Klasse wird dann innerhalb "Ribbon.vb" aufgerufen. Ich würde es gerne als Screenshot posten, leider habe ich kein geprüftes Konto (in Arbeit).

    Den nachfolgenden Tip habe ich schon versucht mit Imports System.Web leider ohne Besserung... https://forums.asp.net/t/922366.aspx?BC30002+Type+TextBox+is+not+defined . Imports System.Windows.Forms bringt auch nichts, da ausgegraut mit dem Hinweis, dass unnötig.

    Der einzige Unterschied zu dem bisherigen Code liegt darin, dass ich übergeordnet noch das eigentliche Projekt habe. Liegt da der Fehler? Mit dem DirectCast-Befehl hat das über Jahre geklappt, weiss jemand Rat, warum das jetzt nicht mehr funzen sollte, bin mit meinem Latein am Ende?

    Danke und freundliche Grüsse

    Robse-Ponte





    Montag, 10. Juni 2019 14:06

Antworten

  • Das könnte u.U. an Namenskonflikten zwischen Assemblies liegen.
    Office bringt eine eigene Forms20 ComboBox mit.

    Vielleicht hilft es, die ComboBox mittels System.Windows.Forms. zu klassifizieren:
    Dim cbAccept As System.Windows.Forms.ComboBox

    Schau mal in deine Using-Direktiven am Anfang.

    • Als Antwort markiert Robse-Ponte Montag, 10. Juni 2019 20:01
    Montag, 10. Juni 2019 17:46

Alle Antworten

  • Das könnte u.U. an Namenskonflikten zwischen Assemblies liegen.
    Office bringt eine eigene Forms20 ComboBox mit.

    Vielleicht hilft es, die ComboBox mittels System.Windows.Forms. zu klassifizieren:
    Dim cbAccept As System.Windows.Forms.ComboBox

    Schau mal in deine Using-Direktiven am Anfang.

    • Als Antwort markiert Robse-Ponte Montag, 10. Juni 2019 20:01
    Montag, 10. Juni 2019 17:46
  • Hoi bfuerchau,

    Ich fasse es nicht. Es funktioniert.

    Das kann doch nicht wahr sein, dass man dies separat zuweisen muss. Tausend Dank für die Hilfe! Ich habe heute den ganzen Tag rumgewurschtelt, Dachte dass es schon deklariert ist wg. ausgegrautem System.Windows.Forms. Super Sache.

    Viele Grüsse

    Montag, 10. Juni 2019 20:01
  • Wichtig bei Using-Direktiven ist die Reihenfolge der Deklaration.
    Der Name einer Klasse wird über die Direktiven ermittelt. Die zuerst gefundene wird dann verwendet.
    Deshalb ist es schon mal ganz hilfreich, die Klasse zu spezifizieren.

    Das Ausgrauen kommt vom Codeanalyser, der allerdings nicht weiß, was du wirklich willst.
    Somit kommt es zu Seiteneffekten, wenn man den Vorschlägen schon mal folgt.

    In der Objekt-Welt eigentlich aller Sprachen ist die eindeutige Qualifizierung einer Klasse immer erforderlich.

    Dienstag, 11. Juni 2019 09:48