2017-08-24 54 views
0

我有兩種類似的方法來根據需要添加用戶控件到面板。但是,嘗試添加時,該方法被調用並完成,但不會將用戶控件添加到表單。嘗試添加用戶控件的各種不同方式時,有一次我可以移動初始用戶控件,它將移動到爲其他用戶控件留出空間,但用戶控件不可見。控件不顯示

編輯:最初的add方法(addInitialItemGroupTest)不工作

Public Sub addItemGroupTest(ByVal sender As Object, ByVal e As EventArgs) 
     Console.WriteLine(Me.GetType.ToString() + "||" + System.Reflection.MethodInfo.GetCurrentMethod.ToString()) 
     Dim item_block_new As New ucItemsetItemBlock 
     ' item_block_new.Visible = True 
     ' item_block_new.Dock = DockStyle.Top 
     item_block_new.flpMain.Name = (10 + item_set.blocks.Count()).ToString 
     item_block_new.BringToFront() 
     frm.flpItemBlocks.Controls.Add(item_block_new) 
     ' item_block_new.Show() 
     AddHandler item_block_new.flpMain.Click, AddressOf addItemToItemBlock 
    End Sub 

    Public Sub addInitialItemGroupTest() 
     Console.WriteLine(Me.GetType.ToString() + "||" + System.Reflection.MethodInfo.GetCurrentMethod.ToString()) 
     Dim item_block As New ucItemsetItemBlock 
     ' item_block.Dock = DockStyle.Top 
     item_block.flpMain.Name = (10 + item_set.blocks.Count()).ToString 
     item_block.BringToFront() 
     frm.flpItemBlocks.Controls.Add(item_block) 
     AddHandler item_block.flpMain.Click, AddressOf addItemToItemBlock 
     ' item_block.Sh 
    End Sub 

    Public Sub showEditor() 
     frm = New frmItemsetEditor 
     frm.TopLevel = False 
     frm.WindowState = FormWindowState.Maximized 
     frm.FormBorderStyle = FormBorderStyle.None 
     If frm.Location.X < 0 Then 
      frm.Location = New Point(0, frm.Location.Y) 
     End If 
     If frm.Location.Y < 0 Then 
      frm.Location = New Point(frm.Location.X, 0) 
     End If 
     frm.Show() 
     addItems() 
     If id > 0 Then 
      Console.WriteLine("loading item set") 
      For Each item_block In item_set.blocks 
       frm.flpItemBlocks.Controls.Add(item_block) 
      Next 
     Else 
      Console.WriteLine("creating item set") 
      item_set = New LeagueItemSet 
      addInitialItemGroupTest() 
      ' addInitialItemGroup() 
     End If 
     AddHandler frm.btnAddItemGroup.Click, AddressOf addItemGroupTest 
     loadUserControl() 
     frm.pnlItemSetUserControl.Controls.Add(uc) 
     frm.flpItemBlocks.BringToFront() 
     AddHandler uc.btnAddUpdate.Click, AddressOf updateSetting 

    End Sub 

    Private Sub btnCreateItemset_Click(sender As Object, e As EventArgs) Handles btnCreateItemset.Click 
     Parent.AccessibleDescription = "status:Loading: Itemset Creation Wizard" 
     rgoism.addSetting() 
     rgoism._Settings.Last.frm.Parent = Me.Parent 
     rgoism._Settings.Last.frm.Location = New Point(Convert.ToInt32((Parent.Size.Width/2) - (rgoism._Settings.Last.frm.Size.Width/2)), Convert.ToInt32((Parent.Size.Height/2) - (rgoism._Settings.Last.frm.Size.Height/2))) 
     rgoism._Settings.Last.frm.BringToFront() 
     Me.Hide() 
     Parent.AccessibleDescription = "status:Ready" 
    End Sub 
+0

'frm.Show()'不適用於TopLevel爲false的表單。你基本上使你的frmItemsetEditor成爲一個UserControl。需要將frm添加到容器的Control集合中。 – LarsTech

+0

表單顯示和其他控件添加到窗體正常工作。我相信我們將其添加到代碼中的其他地方,但我可能是錯的。我可以測試理論 –

+0

我只能通過你發佈的代碼去,我找不到'... Controls.Add(frm)' – LarsTech

回答

0

我不停地調試了近12個小時了。在幾乎入睡的時候,我輸入了一堆console.writeline(),並將其寫入一個方法中,以便在我失去時進行測試。接下來我知道,它將可見的用戶控件添加到表單中。我只需要測試它們,確保它們是獨一無二的,但我太累了。我不知道它是如何工作的,因爲我沒有故意改變任何代碼行。也許我只是因爲偶然而改變了正確的代碼行。我也做了幾條評論,並回顧了幾行。我完全和完全失去了,但它現在起作用了。