0
votes

This has been killing me for a couple of weeks now. I have a browser that I've made and it's using a TabControl. Every time the TabPage "+" is clicked, a new one is added. Each one of these TabPages has userControls (WebBrowser, Address Bar, Back Button, Forward Button, etc..). When the user resizes Form1, I want all userControls to fit to the TabPage/Form1.

Basically, I want my userControls to fit the current size of the Form but I can't figure it out. Right now, I have the TabControls working but that was done by simply using the Anchor property. That option isn't avialable for the UserControls. I manually anchored it programatically but it doesn't resize. It just sticks everything right in the middle with the smaller size....

here's the Code: Here's what it looks like.

'THIS IS THE CODE FOR THE FORM

Imports System.IO Public Class 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

End Class

'THIS IS THE CODE FOR THE USERCONTROLS

Imports System.IO Imports System.Data.OleDb Public Class 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

End Class

1
Just set the control's Dock property to Fill to get to automatically fill the entire tab page.Hans Passant

1 Answers

4
votes

Whenever you create an instance of your UserControl, set its Dock() property to Fill:

Dim theOtherControls As New theControls
theOtherControls.Dock = DockStyle.Fill