2013-06-11 3 views
0

Это уже убило меня на пару недель. У меня есть браузер, который я создал, и он использует TabControl. Каждый раз, когда нажимается TabPage «+», добавляется новый. Каждая из этих TabPages имеет userControls (веб-браузер, адресная строка, кнопка «Назад», кнопка «вперед» и т. Д.). Когда пользователь изменяет размер Form1, я хочу, чтобы все userControls соответствовали TabPage/Form1.Изменение размера UserControls в каждом экземпляре TabPage

В принципе, я хочу, чтобы мои userControls соответствовали текущему размеру формы, но я не могу понять это. Прямо сейчас, у меня есть TabControls, но это было сделано, просто используя свойство Anchor. Этот параметр недоступен для UserControls. Я вручную привязал его программно, но он не изменяет размер. Он просто прилипает все прямо в середине с меньшим размером ....

вот код: Here's what it looks like.

«ЭТО КОД ДЛЯ ФОРМЕ

Импорт 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

«ЭТО КОД ДЛЯ USERCONTR МНК

Импорт 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 

End Class

+0

Просто установите свойство Dock для управления, чтобы заполнить, чтобы автоматически заполнить всю вкладку. –

ответ

4

Всякий раз, когда вы создаете экземпляр вашего UserControl, установите его свойство Dock() для заполнения :

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

FML. Спасибо. – mwilson

Смежные вопросы