2013-08-01 2 views
2

Windows 응용 프로그램 디자인에서 흥미로운 문제가 발생하여 해결이 어려워졌습니다. 현재 회사에서 사용하는 특정 체크리스트를 디지털 방식으로 대체해야하는 프로그램을 작성 중입니다. 이것은 간단해야하지만 프로그램에서 SQL 데이터베이스의 내용을 사용하여 프로그램의 체크리스트에 어떤 항목이 있어야하는지 확인해야합니다 (체크리스트의 항목을 쉽게 변경할 수 있음). 즉, Visual Studio 2010 디자이너 대신 코드를 사용하여 많은 응용 프로그램을 동적으로 디자인하고 만들어야합니다.VB.net의 TableLayoutPanel에서 Groupbox의 컨트롤을 구성하는 방법

저는 SQL 구성 요소와 대부분의 동적 디자인 정보를 파악할 수 있었지만 패배시킬 수없는 복잡한 문제가 하나 있습니다. 체크리스트의 모양을 만들려면 두 열과 한 행으로 TableLayoutPanel을 동적으로 만듭니다. 그런 다음 데이터베이스에서 데이터를 가져 와서 프로그램을 사용하는 사람이해야 할 지침이있는 그룹 상자를 만듭니다. 또한 데이터베이스 항목에 따라 그룹 상자에 레이블, 확인란 또는 둘 다가 포함 된 텍스트 상자를 추가합니다. 마지막으로, 그룹 상자에 텍스트 상자, 레이블 및/또는 확인란을 추가 한 다음 내 테이블에 행을 추가하고 그룹 상자를 해당 행의 테이블에 추가합니다. 그러나 그룹 상자의 모든 컨트롤은 행의 왼쪽 상단 모서리에 매시 져 있으므로 .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

관련 문제