0

这已经让我死了几个星期了。我有一个我制作的浏览器,它使用的是 TabControl。每次点击 TabPage 的“+”,都会添加一个新的。这些 TabPage 中的每一个都有用户控件(WebBrowser、地址栏、后退按钮、前进按钮等)。当用户调整 Form1 的大小时,我希望所有 userControls 都适合 TabPage/Form1。

基本上,我希望我的 userControls 适合表单的当前大小,但我无法弄清楚。现在,我有 TabControls 工作,但这是通过简单地使用 Anchor 属性来完成的。该选项不适用于 UserControls。我以编程方式手动锚定它,但它没有调整大小。它只是将所有东西都粘在中间,尺寸较小....

这是代码: 这是它的样子。

'这是表格的代码

导入 System.IO 公共类 Form1

'The Global Variables
Dim theControls1 As New theControls


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TabPage1.Controls.Add(theControls1)
    theControls1.theBrowser.Navigate("http://google.com")
End Sub

Private Sub Form1_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged



    'For Auto Sizing theControls to Form1

    theControls1.Width = TabControl1.Width - 8
    theControls1.Height = TabControl1.Height - 25
End Sub

Private Sub TabControl1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.Click

    'Add new tab with the same controls.
    Dim theNewTab As New TabPage
    Dim theOtherControls As New theControls
    Dim theTabCounter As Integer = TabControl1.TabPages.Count

    theOtherControls.AutoSize = True
    theOtherControls.Width = TabControl1.Width
    theOtherControls.Height = TabControl1.Height

    theOtherControls.Anchor = AnchorStyles.Right & AnchorStyles.Left & AnchorStyles.Bottom & AnchorStyles.Top



    Dim theSelectedTab As String = TabControl1.SelectedTab.Text

    If theSelectedTab = "+" Then
        TabControl1.TabPages.Insert(theTabCounter - 1, theNewTab)
        theNewTab.Controls.Add(theOtherControls)
        theControls1.theBrowser.Navigate("http://google.com")
        theOtherControls.theBrowser.Navigate("http://google.com")
        TabControl1.SelectTab(theTabCounter - 1)
    End If
End Sub

结束类

'这是用户控件的代码

导入 System.IO 导入 System.Data.OleDb 公共类 theControls

'The History Database Connection String 
Dim theHistoryDatabaseConn As New OleDbConnection

Private Sub ComboBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles theAddressBar.KeyDown
    'Navigate to Webpage stated in theAddressBar
    If e.KeyValue = Keys.Enter Then
        theBrowser.Navigate(theAddressBar.Text)
        e.SuppressKeyPress = True
    End If
End Sub

Private Sub goForward_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles goForward.Click
    theBrowser.GoForward()
End Sub

Private Sub goBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles goBack.Click
    theBrowser.GoBack()
End Sub

Private Sub theBrowser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles theBrowser.DocumentCompleted

    'Set Tab Text to current web page and Address Bar
    Form1.TabControl1.SelectedTab.Text = theBrowser.Url.Host.ToString
    Me.theAddressBar.Text = Me.theBrowser.Url.AbsoluteUri.ToString

    'Read the History
    theHistoryDatabaseConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Marc Wilson\Documents\Visual Studio 2010\Projects\myBrowser\myBrowser\bin\Debug\TheHistoryDB.accdb"
    theHistoryDatabaseConn.Open()


    'Populate theAddressBar with the contents from the History 
    theAddressBar.Items.Clear()
    Dim readTheHistory As String
    Dim getTheHistory As OleDbCommand
    readTheHistory = "SELECT [Host Name] FROM TheHistory"
    getTheHistory = New OleDbCommand(readTheHistory, theHistoryDatabaseConn)
    Dim theData As New OleDbDataAdapter(getTheHistory)
    Dim theTable As New DataTable("TheHistory")
    'theHistoryDatabaseConn.Open()
    theData.Fill(theTable)
    For Each row As DataRow In theTable.Rows
        theAddressBar.Items.Add(row.Item("Host Name"))
    Next




    'Writes history to TheHistory Database (No Duplicates!)
    If theAddressBar.Items.Contains(theBrowser.Url.Host.ToString) Then
    Else

        'Write The History
        Dim writeTheHistory As OleDbCommand = New OleDbCommand("INSERT INTO TheHistory ([Host Name], [Absolute Path]) VALUES (theBrowser.URL.Host.ToString, theBrowser.URL.AbsoluteUri.ToString)", theHistoryDatabaseConn)
        writeTheHistory.Parameters.Add("@Host Name", OleDbType.Char, 255).Value = theBrowser.Url.Host.ToString
        writeTheHistory.Parameters.Add("@Absolute Path", OleDbType.Char, 255).Value = theBrowser.Url.AbsoluteUri.ToString

        theHistoryDatabaseConn.Close()


        theHistoryDatabaseConn.Open()
        writeTheHistory.ExecuteNonQuery()
        theHistoryDatabaseConn.Close()
    End If
    theHistoryDatabaseConn.Close()
End Sub

Private Sub theBrowser_ProgressChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles theBrowser.ProgressChanged

    'Status Bar Text
    Label1.Text = theBrowser.StatusText.ToString
End Sub

Private Sub theAddressBar_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles theAddressBar.SelectedValueChanged
    Me.theBrowser.Navigate(Me.theAddressBar.Text)
End Sub

结束类

4

1 回答 1

4

每当您创建 UserControl 的实例时,请将其 Dock() 属性设置为 Fill:

Dim theOtherControls As New theControls
theOtherControls.Dock = DockStyle.Fill
于 2013-06-11T02:34:36.573 回答