TabControl anders anordnen und auslagern
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Schamash.
-
-
-
-
-
-
Ist deine Entscheidung, ob du von "TabControl" erbst oder von "UserControl". Ich rate "UserControl". Musste halt dann alle Properties etc selber implementieren, aber du kannst dafür die Effekte besser steuern.#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Ich hab da letztens mal was gebastelt.
Das geht bestimmt auch schöner aber es kann dir ja als Grundgerüst dienen.
Das TBC kann Drag & Drop und hat einen "Schließen" Button
Spoiler anzeigen
VB.NET-Quellcode
- Public Class odcFormatiert : Inherits System.Windows.Forms.TabControl
- 'Drag and Drop & Neu Anordnen
- Private tbp_Ausgewählt As System.Windows.Forms.TabPage = Nothing
- Private tbp_Ziel As System.Windows.Forms.TabPage
- Private rec_Hintergrund As Rectangle
- Private rec_SchliessenSchaltfläche As Rectangle
- Public Shared int_ChildFormNumber As Integer = 0 'Zählvariable für die bereits geöffneten Tabs
- Private Sub Tc_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
- Dim brushHintergrund As Brush = New SolidBrush(Color.GhostWhite) 'Legt den "Pinsel" fest mit dem die Rechtecke gemahlt werden sollen
- rec_Hintergrund = e.Bounds
- 'Hier wird ein Rechteck über den aktuellen TabHeader gelegt
- rec_Hintergrund.X = rec_Hintergrund.X + rec_Hintergrund.Width
- rec_Hintergrund.Width = Me.Width
- If e.Index = Me.TabCount - 1 Then 'Wenn die letzte TabPage erreicht ist wird der restliche Hintergrund gefärbt.
- e.Graphics.FillRectangle(brushHintergrund, rec_Hintergrund.X, 0, rec_Hintergrund.Width, 22)
- End If
- 'Hier wird ein Rechteck über den aktuellen Tab gelegt.
- e.Graphics.FillRectangle(brushHintergrund, e.Bounds.X, 0, e.Bounds.Width, 22)
- 'festlegen der größe des zuzeichnenden Buttons
- Dim coordX As Integer = e.Bounds.Left + e.Bounds.Width - 18 'linke obere Ecke + Breite des Tabs - 18wegen einrücken
- Dim coordY As Integer = e.Bounds.Top + 2 'Y-Koord der oberen Kante + 2 wegen einrücken
- rec_SchliessenSchaltfläche = New Rectangle(coordX, coordY, 16, 16) 'Coordinaten des Buttons festlegen
- 'Formatierung der Schrift des Tabs
- 'notwendige Prüfung da es beim Verschieben von Tab2 auf Tab1 , bei nur 2 existierenden Tabs zu einem Fehler kommt
- If Not e.Index > Me.TabCount - 1 Then
- e.Graphics.DrawString(Me.TabPages(e.Index).Text, Font, Brushes.Black, 2 + e.Bounds.Left, 4)
- End If
- 'Einstellungen das Buttons
- ControlPaint.DrawCaptionButton(e.Graphics, rec_SchliessenSchaltfläche, CaptionButton.Close, ButtonState.Flat)
- End Sub
- #Region "Überlagerung der Standart Events des TabControls"
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- 'Es werden 2 Unterschiedliche Events ausgelöst.
- '1. Entfernung der gewählten TabPage wenn der "Close"-Button gewählt wurde
- '2. Begin des Verschiebevorganges
- 'Entfernt die ausgewählte Tabpage
- If rec_SchliessenSchaltfläche.Contains(e.Location) Then
- If Not Me.SelectedTab.Text.Contains("Aktuell - ") Then
- Me.TabPages.RemoveAt(Me.SelectedIndex)
- int_ChildFormNumber -= 1
- Exit Sub 'wenn die TabPage geschlossenwurde darf ein Verschieben nicht mehr ausgelöst werden
- End If
- End If
- 'Startet das Verschieben der TabPage
- If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (MyBase.SelectedTab IsNot Nothing) AndAlso (Not MyBase.GetTabRect(MyBase.SelectedIndex).IsEmpty) Then
- Me.tbp_Ausgewählt = MyBase.SelectedTab
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- With MyBase.TabPages
- If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (Me.tbp_Ausgewählt IsNot Nothing) Then
- tbp_Ziel = TabErmitteln(e.X, e.Y)
- If (tbp_Ziel IsNot Nothing) Then
- Dim currRect As Drawing.Rectangle = MyBase.GetTabRect(.IndexOf(tbp_Ziel))
- 'Die TabPage wird immer auf den Index des PabPages geschrieben über dem sich die Maus befindet.
- 'Hier wird geprüft wo sich der MouseCursor im verhältniss zum zuverschiebenden TabPage befindent.
- 'Entsprechend seiner Position wird dann ein Pfeil nach Links oder Rechts angezeit.
- If (.IndexOf(tbp_Ziel) < .IndexOf(Me.tbp_Ausgewählt)) Then
- MyBase.Cursor = Cursors.PanWest
- ElseIf (.IndexOf(tbp_Ziel) > .IndexOf(Me.tbp_Ausgewählt)) Then
- MyBase.Cursor = Cursors.PanEast
- Else 'Die TabPage unterhalb des Cursors ist der Aktuelle (zu verschiebende) Tab -> Cursor wird Default
- MyBase.Cursor = Cursors.Default
- End If
- Else 'Es befindet sich keine TabPage unterhalb des Cursors -> Ein Verschieben ist hierher nicht möglich.
- Me.Cursor = Cursors.No
- End If
- Else 'Wenn keine TabPage ausgewählt wurde
- Me.Cursor = Cursors.Default
- End If
- MyBase.OnMouseMove(e)
- End With
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- With MyBase.TabPages
- If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (Me.tbp_Ausgewählt IsNot Nothing) Then
- tbp_Ziel = TabErmitteln(e.X, e.Y)
- If (tbp_Ziel IsNot Nothing) AndAlso (Not tbp_Ziel.Equals(Me.tbp_Ausgewählt)) Then
- Dim currRect As Drawing.Rectangle = MyBase.GetTabRect(.IndexOf(tbp_Ziel))
- If (.IndexOf(tbp_Ziel) < .IndexOf(Me.tbp_Ausgewählt)) Then
- .Remove(Me.tbp_Ausgewählt)
- .Insert(.IndexOf(tbp_Ziel), Me.tbp_Ausgewählt)
- MyBase.SelectedTab = Me.tbp_Ausgewählt
- ElseIf (.IndexOf(tbp_Ziel) > .IndexOf(Me.tbp_Ausgewählt)) Then
- .Remove(Me.tbp_Ausgewählt)
- .Insert(.IndexOf(tbp_Ziel) + 1, Me.tbp_Ausgewählt)
- MyBase.SelectedTab = Me.tbp_Ausgewählt
- End If
- End If
- End If
- Me.tbp_Ausgewählt = Nothing
- MyBase.Cursor = Cursors.Default
- MyBase.OnMouseUp(e)
- End With
- End Sub
- Private Function TabErmitteln(ByVal x As Integer, ByVal y As Integer) As TabPage
- For i As Integer = 0 To MyBase.TabPages.Count - 1
- If MyBase.GetTabRect(i).Contains(x, y) Then
- Return MyBase.TabPages(i)
- End If
- Next
- Return Nothing
- End Function
- #End Region
- End Class
Ich würde mich freuen wenn du mir deine überarbeitete Version zeigen würdest.
Ich bin noch am üben mit den UserControls. Hoffe davon dann auch lernen zu können.There is no CLOUD - just other people's computers
Q: Why do JAVA developers wear glasses?
A: Because they can't C#
Daily prayer:
"Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP." -
-
@iEi
konntest du mein Control verbessern?
Wenn ja würde ich das gerne sehen damit ich daraus was lernen kann. Danke!There is no CLOUD - just other people's computers
Q: Why do JAVA developers wear glasses?
A: Because they can't C#
Daily prayer:
"Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
-
Ähnliche Themen