2016-06-27 7 views
0

Ich habe eine Frage here und, nach vielen Versuchen, ich akzeptierte die Antwort, die mir vorgeschlagen, ein verstecktes Steuerelement anstelle einer zusätzlichen Kontrolle zu verwenden.Dinamically hinzugefügt Steuerelement (DataGridView) funktioniert nicht Propertly

Auf diese Weise läuft mein Code korrekt, aber ich möchte den Fehler verstehen.

Das ist, was passiert: Wenn ich eine Taste drücken, ein neues Datagridview hinzugefügt wird, aber
a) es nicht sichtbar ist, auch wenn seine Eigenschaft sichtbar True festgelegt ist;
b) wenn (während die hinzugefügte DGV im Formular ist) ich DGV Eigenschaft sichtbar auf False setzen und dann setze ich es auf True der DGV erscheint, aber Spalten sind nicht in der Größe geändert;
c) Wenn ich das hinzugefügte DGV entferne und es neu hinzufüge, ist es wieder "unsichtbar".

ALLE DIESE PROBLEME PASSIEREN NICHT, WENN ICH EIN ANDERES SUB RUN

If:
a) ich eine Unter ausführen, die meine erste Form versteckt und zeigt eine andere Form;
b) dann schließe ich die zweite Form, um zur ersten Form zurückzukehren;
alles funktioniert gut:
die DGV ist korrekt hinzugefügt;
ist es sichtbar;
Alle Spalten werden korrekt skaliert;
Wenn ich DGV entferne oder neu hinzufüge, funktioniert alles noch.

Bitte zeigen Sie mir, wo ich falsch liege.

+0

Wie lautet Ihr Code zum Hinzufügen des DGV? – Aimnox

+0

@Aimnox Der ganze Code ist in meiner anderen Frage. Ich gab den Link zu Beginn dieser Frage an. – genespos

+0

Versuchen Hinzufügen ‚Me.Hide() Me.Show()‘ in erster Form, nachdem Sie die Datagridview erstellen, um zu sehen, ob es wegen des Verstecken/Sichtbar machen Prozess der Form 1 wirklich ist? – HaPhan

Antwort

0

Dies ist der Code, den ich von Ihrem früheren Link erhalten habe. Es zeigt das Datagridview wie erwartet in meinem Formular an. Wie Sie sehen, ist es genau Ihr Code, mit Ausnahme des "using" -Blocks --- und der Art, wie Sie die Datentabelle abrufen. Das sind die einzigen zwei Unterschiede.

Private Sub ShowHideTbl() 
    Dim DTemp As DataTable = GetTable() 
    Dim DGV_Tbl As DataGridView = Nothing 
    Try 
     DGV_Tbl = CType(Me.Controls("DGV_Tbl"), DataGridView) 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
    If DGV_Tbl Is Nothing Then 
     If Me.CBox_ProcType.Text = "Select a Procedure" Then 
      MsgBox("You need To select a Procedure", vbInformation, "Unable to show table") 
      Exit Sub 
     End If 
    End If 
    DGV_Tbl = New DataGridView 
    With DGV_Tbl 
     .Name = "DGV_Tbl" 
     .DataSource = DTemp 
     Me.Controls.Add(DGV_Tbl) 
     .AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) 
     .RowHeadersVisible = False 
     .AllowUserToAddRows = False 
     .AllowUserToDeleteRows = False 
    End With 
    Dim DGV_H As Integer = 0 
    Dim DGV_W As Integer = 0 
    For Each S As DataGridViewRow In DGV_Tbl.Rows 
     DGV_H += S.Height 
    Next 
    DGV_H += DGV_Tbl.ColumnHeadersHeight 
    'Add more space to include spaces between cells 
    DGV_H += CInt(DGV_Tbl.Rows.Count * 0.45) 
    For Each S As DataGridViewColumn In DGV_Tbl.Columns 
     DGV_W += S.Width 
    Next 
    'Add more space to include spaces between cells 
    DGV_W += CInt(DGV_Tbl.Columns.Count * 0.45) 
    DGV_Tbl.Height = DGV_H 
    DGV_Tbl.Width = DGV_W 
    'Resize the Form 
    Me.Height += DGV_H + 30 
    Me.Controls("DGV_Tbl").Location = New Point(15, Me.Height - DGV_H - 30) 
End Sub 

Ihr Problem ist den meisten fremd, und da ich zu versuchen und testen den Code nicht haben, meine nur empfehlen, dass Sie diesen Code in eine neue Form einfügen, sehen, ob es funktioniert. Wenn dies der Fall ist, fügen Sie Ihr anderes Steuerelement von Formular 1 hinzu, führen Sie den Code erneut aus, um zu sehen, ob es noch funktioniert. Wiederholen Sie den Vorgang, bis Sie herausfinden, was die Ursache ist.

Ich glaube, dass Sie herausfinden können, was wirklich in Ihrer Form mit diesem geschieht. Wer weiß, diese neue Form wird wahrscheinlich funktionieren.

Verwandte Themen