2016-06-27 17 views
0

私は質問hereを投稿し、多くの試みの後、追加コントロールの代わりに隠しコントロールを使用するように提案した回答を受け入れました。動的に追加されたコントロール(DataGridView)が正常に機能しない

私のコードは正しく動作しますが、間違いを理解したいと思います。何が起こるかだ

: 私は新しいのDataGridViewが追加されたボタンが、を押すと
a)は、目に見える彼のプロパティをTrueに設定されている場合でも表示されません。
b)(追加されたDGVがフォーム上にあるとき)DGVプロパティをFalseに設定してから、それをTrueに再設定しますが、DGVは表示されますが列のサイズは変更されません。
c)追加したDGVを削除して再追加すると、再び「非表示」になります。場合、私は別のサブ

を実行する場合

ALLこれらのトラブルは発生しない:
A)私は私の最初のフォームを隠し、別のフォームを示してサブを実行します。
b)次に、2番目のフォームを閉じて1番目のフォームに戻ります。
すべて正常に動作します。
DGVが正しく追加されました。
これは表示されています。
すべての列のサイズが正しく変更されています。
DGVを削除または再追加しても、すべて動作します。

私が間違っている場所を教えてください。

+0

DGVを追加するためのコードは何ですか? – Aimnox

+0

@Aimnoxすべてのコードは私の他の質問にあります。私はこの質問の始めにリンクを与えました。あなたはそれが本当にあるため、フォーム1の表示/非表示のプロセスのためですかどうかを確認するためにDataGridViewのを作成した後、第一形で 「Me.Hide() Me.Show()」 を追加 – genespos

+0

みては? – HaPhan

答えて

0

これは以前のリンクから取得したコードです。それは私のフォームで期待どおりにdatagridviewを表示します。ご覧のように、ブロックを使用していることを除いて、あなたのコードと同じです---そしてあなたがデータテーブルを取得する方法。それが唯一の2つの違いです。

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 

あなたの問題は最も奇妙である、と私は試してみて、テストするためのコードを持っていないので、私は唯一の提案は、あなたがそれが動作するかどうかを確認する、新しいフォームにこのコードを貼り付けていることです。そうであれば、それにフォーム1の他のコントロールを追加し、コードをもう一度実行して、まだ機能しているかどうかを確認します。何が原因であるかを知るまでプロセスを繰り返します。

私はあなたが本当にあなたのフォームで何が起こっているかを知ることができると信じています。誰が知っている、新しいフォームはおそらく動作します。

関連する問題