Zugriff auf Combobox als Referenz ?

G

Gast

Hallo liebe Forumsgemeinde,

ich hoffe ihr könnt mir bei folgendem Problem helfen. ( Visual Basic 2008 Express Edition)

In einem Formular habe ich mehrere ComboBoxen, anhand derer
ich einen Sql String zusammen basteln möchte mein bisheriger Ansatz schlägt leider fehl.

Code:
Private Sub .......
Dim ComboBoxen() As String = {"Combobox1", "Combobox2", "Combobox3",........
Dim Box As New System.Windows.Forms.ComboBox
        For i As Integer = 0 To ComboBoxen.Count - 1
            Box = Me.Controls(ComboBoxen(i))
            If Box IsNot Nothing Then
                If Box.SelectedItem IsNot Nothing Then

                           ' Wenn ich hier folgendes mache
                              MeineStruktur(index).rows = Box.SelectedIndex
                            ' bekomme ich folgenden Fehler : NullReferenceExeption wurde nicht behandelt
                            ' aber dies habe ich doch schon mit if Box isnot nothing gemacht

                 End If
            End If
        Next
End Sub

Kann mir bitte jemand die Augen öffnen ? Eigentlich sollte das doch gehen.

Gruß
Manni
 
Hallo!

Ich habe das mal schnell ausprobiert.
Der Code von Dir funktioniert.
Vielleicht wird die Exception ja vom 'MeineStruktur'-Objekt ausgelöst?

codeman
 
Zuletzt bearbeitet:
Hallo Codeman,

danke für deinen Versuch :)

Vielleicht liegt es am gesamt konstrukt

Ich habe eine Hauptform (Form1)

in dieser ist folgendes definiert

Code:
    Public Class ImportSet
        Public row As Integer
        Public field As String
    End Class

der Zugriff der Checkboxen erfolgt in einem Dialog dort ist definiert

Code:
Public Class MeinDialog

   ......
   Dim UpdateInfo() As Form1.ImportSet
   ........
Function GenerateUpdateInfo() As Boolean
        Dim SelectedRows As Integer = 0
        Dim ComboBoxen() As String = {"Combobox1", "Combobox2", "Combobox3", "Combobox4", "Combobox5", "Combobox6", "Combobox7"}
        Dim Fields() As String = {"bestellnum", "kalk_einkaufspr", "kalk_verkaufspr", "kalk_preis1", "kalk_preis2", "kalk_preis3", "kalk_preis4"}



        Dim Box As New System.Windows.Forms.ComboBox
        For i As Integer = 0 To ComboBoxen.Count - 1
            Box = Me.Controls(ComboBoxen(i))
            If Box IsNot Nothing Then
                If Box.SelectedItem IsNot Nothing Then
                    SelectedRows += 1
                    ReDim Preserve UpdateInfo(SelectedRows)
                    UpdateInfo(SelectedRows - 1).row = Box.SelectedIndex
                    UpdateInfo(SelectedRows - 1).field = Fields(i)
                End If
            End If
        Next


.....

ich kann mir nicht vorstellen das es an der ImportSet Klasse liegt ?
Ich versteh einfach nicht was ich falsch mache, zum Fehler (Debug-Mode)
wird hier "Box.SelectedIndex" markiert.

Kannst du da vielleicht nochmal drüber gucken ?

Mfg
Manni
 
Hi!

Also es liegt irgendwie am UpdateInfo-Objekt bzw. am Array.
Du könntest das ganze Redimensionieren des Arrays umgehen in dem du eine generische Liste "ListOf(UpdateInfo)" erstellst die dann auch ein wesentlich leichteres Handling hat.

codeman
 
Zuletzt bearbeitet:
Hallo Codeman,

das mit den Intergerwerten ist gewollt und den Fehler hab ich auch gefunden

Falsch :
Code:
 ReDim Preserve UpdateInfo(SelectedRows)
 UpdateInfo(SelectedRows - 1).row = Box.SelectedIndex
 UpdateInfo(SelectedRows - 1).field = Fields(i)

Richtig :
Code:
ReDim Preserve UpdateInfo(SelectedRows)
UpdateData(SelectedItems - 1) = New ImportSet()
If UpdateData(SelectedItems - 1) IsNot Nothing Then
UpdateData(SelectedItems - 1).row = Box.SelectedIndex
UpdateData(SelectedItems - 1).field = "Box" & boxindex
MsgBox(UpdateData(SelectedItems - 1).field & UpdateData(SelectedItems - 1).row)
End If


Hätte mir eigentlich sofort einfallen müssen aber aber ......
ich benutz Visual basic ja erst 2 Wochen ..

Die Frage bleibt : Warum hats bei dir geklappt :)

Danke für deine Hilfe !
 
Mist. Schneller hab mein posting bearbeitet bevor Deine Antwort kam. :)

Bei mir hat es zuerst geklappt weil ich den Fehler nicht im Array gesucht habe und nur mit dem Debugger den Wert ausgegeben habe...

Aber hauptsache es läuft!
codeman
 
Ich hab da noch eine Frage :)

Gibt es eine Möglichkeit inline zu prüfen ob Instanz(OleDb.OleDbDataReader).getValue( int )
eine null referzenz zurück gibt ?

Also sowas wie

Code:
Dim reader As OleDb.OleDbDataReader
......
.......
String = "INSERT INTO TABLE(FELD) VALUES('" & (    (reader.getValue(index)==NULL)?0:reader.getValue(index)      ) & "')"
 
Zurück