2013-08-01 16 views
2

我碰到與我有一些困難,解決Windows窗體應用程序設計一個有趣的問題。我目前正在開發一個應用程序,該程序應該是我公司使用的某個清單的數字替代品。這應該是簡單的,但它已經授權程序應該使用SQL數據庫的內容,以確定應在程序(使它容易改變在列表中的項目)的清單,哪些項目。這意味着我必須使用代碼動態設計和創建大部分應用程序,而不是使用Visual Studio 2010設計器。如何組織控制在一個組框一個TableLayoutPanel內部在VB.net

我已經能夠找出SQL的東西,甚至大多數的動感設計的東西,但有一個複雜的問題,我似乎無法擊敗。爲了創建一個清單的外觀,我動態地創建了一個有兩列和一行的TableLayoutPanel。然後,我從數據庫中獲取數據,並創建一個組標題,上面標明瞭使用該程序的人員需要執行的操作說明。根據數據庫條目,我還將一個帶有標籤,複選框或兩者的文本框添加到groupbox。最後,我將文本框,標籤和/或複選框添加到groupbox,然後向我的表中添加一行並將groupbox添加到該行的表中。但是,groupbox中的所有控件都被嵌入到該行的左上角,因此我嘗試使用其.location屬性來調整其組織。不幸的是,當我改變這個屬性時,受影響的控件完全從表單中消失。我嘗試過使用.bringtofront()方法,但沒有成功;該控件仍然缺失。

我所尋找的是本身包含在另一個動態創建的分組控制如何在動態創建的組框(或任何其他分組控制)組織動態創建控件的指導。我真的很感謝我能得到的任何幫助;這個問題阻止了我去開發程序的功能。適用的代碼在下面發佈。提前致謝!

Private Sub addItem(ByVal count As Integer, ByVal itemList As List(Of checklistField)) 
    If itemList(count).hasTextbox Or itemList(count).hasCheckbox Then 
     Dim newGroupbox As New GroupBox 
     With newGroupbox 
      .Dock = DockStyle.Fill 
      .Text = itemList(count).instruction 
     End With 

     If ((itemList(count).hasTextbox = True) And (itemList(count).hasCheckbox = False)) Then 
      Dim newTextboxLabel As New Label 
      With newTextboxLabel 
       .Text = itemList(count).textboxLabel 
       '.Location = New Point(20, (475)) 
       .AutoSize = True 
      End With 

      Dim newTextbox As New TextBox 
      With newTextbox 
       .Name = "Textbox" & count.ToString 
       .Size = New Size(100, 20) 
       '.Location = New Point(100, (470 + (10 * count))) 
      End With 

      textboxList.Add(newTextbox) 
      newGroupbox.Controls.Add(newTextboxLabel) 
      newGroupbox.Controls.Add(newTextbox) 

      tblFields.RowCount += 1 
      tblFields.RowStyles.Add(New RowStyle(SizeType.AutoSize)) 
      tblFields.Controls.Add(newGroupbox, 0, tblFields.RowCount - 1) 

回答

2

你註釋掉的位置屬性有Y值設置得過高,所以控件是不可見的形式:

'.Location = New Point(20, (475)) 
'.Location = New Point(100, (470 + (10 * count))) 

控件的位置是相對於母公司的客戶空間,所以使用更小的數字:

With newTextboxLabel 
    .Text = itemList(count).textboxLabel 
    .Location = New Point(20, 20) 
    .AutoSize = True 
End With 

Dim newTextbox As New TextBox 
With newTextbox 
    .Name = "Textbox" & count.ToString 
    .Size = New Size(100, 20) 
    .Location = New Point(20, 40) 
End With 
+0

它的工作!謝謝!這真的讓我感到很開心,因爲我已經花了很多時間搞亂了這個位置,沒有運氣。好吧,開始工作吧! – Arch