【发布时间】:2018-08-20 18:50:57
【问题描述】:
概述:创建一个小应用程序来协助查看 SCCM 的日志文件。
我刚开始开发一个小应用程序来分析日志文件。主窗体有一个名为“tcMain”的空 TabControl。它还有一个按钮(用于测试目的),它将创建一个新的“LogAssembly”类。此类包含 TabPage 和其他嵌套控件的 UI 元素。
LogAssembly 类的内部是一个 RichTextBox。它以文本框随表单大小增长的方式锚定。
问题:创建的第一个“LogAssembly”按预期工作。 tcMain 已填充,一切看起来都很好。富文本框按预期调整大小。
任何后续的 LogAssembly 都有问题。富文本框很大,看起来超出了它所嵌套的控件。
我怀疑这个问题与我创建/操作控件的顺序有关。但是,我并没有牢牢掌握运行时的控制管理。我希望有人能指出我在这里做错了什么。
下面是相关代码:
Form1:(按 btnOptions 在 tcMain 上创建新的“LogAssembly”)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = "SCCM Log Analyzer (v" & APP_VERSION & ")"
End Sub
Private Sub btnOptions_Click(sender As Object, e As EventArgs) Handles btnOptions.Click
Dim TestA As New LogAssembly(tcMain, "Example_")
End Sub
End Class
LogAssembly 类:
Public Class LogAssembly
Public UI_ParentTab As TabPage = New TabPage
'Main UI Elements
Public UI_GroupBoxA As GroupBox = New GroupBox
Public UI_ChildTabControl As TabControl = New TabControl
Public UI_PageEvents As TabPage = New TabPage
Public UI_PageText As TabPage = New TabPage
Public UI_PageItem As TabPage = New TabPage
'Event View Elements
Public UI_EventsText As RichTextBox = New RichTextBox
Public UI_EventsResearch As Button = New Button
Public Sub New(ByRef parent As TabControl, ByVal data As String)
UI_ParentTab.Text = data
parent.TabPages.Add(UI_ParentTab)
'Group Box UI
UI_GroupBoxA.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
UI_ParentTab.Controls.Add(UI_GroupBoxA)
UI_GroupBoxA.Location = New System.Drawing.Point(5, 5)
UI_GroupBoxA.Size = New Point(912, 405)
UI_GroupBoxA.Text = "Selected Log"
'Tab Control UI
UI_GroupBoxA.Controls.Add(UI_ChildTabControl)
UI_ChildTabControl.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
UI_ChildTabControl.Location = New System.Drawing.Point(5, 15)
UI_ChildTabControl.Size = New Point(900, 385)
'Tab Page Events
UI_ChildTabControl.TabPages.Add(UI_PageEvents)
UI_PageEvents.Text = "Event View"
UI_PageEvents.Controls.Add(UI_EventsText)
UI_PageEvents.Controls.Add(UI_EventsResearch)
'_TextBox
UI_EventsText.Text = data
UI_EventsText.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
UI_EventsText.Location = New System.Drawing.Point(5, 30)
UI_EventsText.Size = New Point(490, 140)
'_Button
UI_EventsResearch.Location = New Point(5, 5)
UI_EventsResearch.Text = "Things"
'Tab Page Text
UI_ChildTabControl.TabPages.Add(UI_PageText)
UI_PageText.Text = "Text View"
'Tab Page Item
UI_ChildTabControl.TabPages.Add(UI_PageItem)
UI_PageItem.Text = "Item View"
End Sub
End Class
【问题讨论】:
-
打破按钮按下并逐步完成该过程似乎可以解决锚定问题。我在类文件中扔了很多 Application.DoEvents() 以便我可以看到哪个部分导致了绘图问题。但是,它并没有透露任何有用的信息。我删除了断点并留下了“DoEvents()”。问题返回。也许这是线程或时间问题?
-
绘图问题?我以为这是控件大小问题?
-
为什么要将
Point分配给Size属性? 启用Option Strict. -
在调试中单步执行时我能想到的唯一区别是我可以在标签页被绘制后立即单击它。然后继续单步执行,观察剩余的控件被绘制出来。
-
我称之为绘图问题。据我所知,这仍然是一个锚定问题。因为如果我删除锚定属性线。它会画得很好。至于点和大小。我复制了我在设计器代码中看到的完成方式。