| |
VB.NET - FortgeschritteneTabpages enabled | | | Autor: PACoSys | Datum: 10.06.04 17:55 |
| Hallo,
ich habe folgendes Problem, wenn ich mit tabCtrl.TabPages(1).Enabled = False eine Tabpage enable werden zwar die Steuerelemente auf dieser deaktiviert, aber sie selbst ist noch wählbar. Kann man das irgendwie umgehen? Bzw. wie deaktiviert man eine Tabpage richtig?
Gru? Patrick
---
Wer nicht fragt, bleibt dumm. | |
Re: Tabpages enabled | | | Autor: WaldiMaywood | Datum: 10.06.04 22:34 |
| Indem du dir z.B. eine eigene TabControl Klasse erstellst und dieses Feature integrierst. Aber, was rede ich, schau doch einfach hier (d. dritte Beitrag) vorbei.
Steve | |
Re: Tabpages enabled | | | Autor: WaldiMaywood | Datum: 11.06.04 11:38 |
| Falls du Probleme mit Klasse hast, hier der funktionierende Code (war ein kleiner Fehler enthalten):
Public Class TabControlEx
Inherits System.Windows.Forms.TabControl
Private Const WM_LBUTTONDOWN As Integer = &H201
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_LBUTTONDOWN Then
Dim pt As New Point(m.LParam.ToInt32)
Dim index As Integer
For index = 0 To Me.TabPages.Count - 1
If GetTabRect(index).Contains(pt) Then
If TabPages(index).Enabled Then
MyBase.WndProc(m)
End If
Exit Sub
End If
Next
End If
MyBase.WndProc(m)
End Sub
Protected Overrides Sub OnKeyDown(ByVal ke As _
System.Windows.Forms.KeyEventArgs)
Dim currentIndex As Integer = Me.SelectedIndex
Dim index As Integer
If ke.KeyCode = Keys.Left AndAlso Not (ke.Alt AndAlso Not ke.Control) _
Then
For index = currentIndex - 1 To 0 Step -1
If TabPages(index).Enabled Then
Me.SelectedIndex = index
Exit For
End If
Next
ke.Handled = True
ElseIf ke.KeyCode = Keys.Right AndAlso Not (ke.Alt AndAlso Not _
ke.Control) Then
For index = currentIndex + 1 To TabPages.Count - 1
If TabPages(index).Enabled Then
Me.SelectedIndex = index
Exit For
End If
Next
ke.Handled = True
End If
MyBase.OnKeyDown(ke)
End Sub
Public Sub DisablePage(ByRef pTabPage As TabPage)
With pTabPage
.Enabled = False
End With
Me.Refresh()
End Sub
Private Sub TabControlEx_DrawItem(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DrawItemEventArgs) Handles MyBase.DrawItem
Dim intOffsetLeft As Int32
Dim intOffsetTop As Int32
Dim r As RectangleF = RectangleF.op_Implicit(e.Bounds)
Dim r2 As RectangleF
Dim ItemBrush As New SolidBrush(Me.BackColor)
Dim b As Brush
If Me.TabPages(e.Index).Enabled Then
b = Brushes.Black
Else
b = Brushes.Gray
End If
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
Dim im As Bitmap
If Me.TabPages(e.Index).ImageIndex <> -1 Then
im = CType(Me.ImageList.Images(Me.TabPages(e.Index).ImageIndex), _
Bitmap)
End If
If Me.TabPages(e.Index).ImageIndex <> -1 Then
r2 = New RectangleF(r.X + (im.Width \ 2), r.Y, r.Width, r.Height)
Else
r2 = New RectangleF(r.X, r.Y, r.Width, r.Height)
End If
If CBool(e.State And DrawItemState.Selected) Then
e.Graphics.FillRectangle(ItemBrush, e.Bounds)
e.Graphics.DrawString(Me.TabPages(e.Index).Text, e.Font, b, r2, sf)
intOffsetLeft = 5
intOffsetTop = 5 '4
Else
e.Graphics.DrawString(Me.TabPages(e.Index).Text, e.Font, b, r2, sf)
intOffsetLeft = 2
intOffsetTop = 2 '4
End If
If Me.TabPages(e.Index).ImageIndex <> -1 Then
Me.ImageList.Draw(e.Graphics, Convert.ToInt32(r.Left) + _
intOffsetLeft, Convert.ToInt32(r.Top) + intOffsetTop, Me.TabPages( _
e.Index).ImageIndex)
End If
End Sub
End Class Übrigens, damit das Tab auch wie Enabled = False dargestellt wird, muss du die TabControl "DrawMode " Eigenschaft auf "OwnerDrawFixed" ändern.
TabPages "deaktivieren" kannst du dann mit der "DisablePage()" Methode. | |
Re: Tabpages enabled | | | Autor: PACoSys | Datum: 16.06.04 08:55 |
| Soweit funktioniert's. Das Problem ist bloß, daß TabControlEx_DrawItem nicht aufgerufen wird. Woran kann das liegen?
Gru? Patrick
---
Wer nicht fragt, bleibt dumm. | |
Re: Tabpages enabled | | | Autor: WaldiMaywood | Datum: 16.06.04 09:21 |
| >> Das Problem ist bloß, daß TabControlEx_DrawItem nicht aufgerufen wird. Woran kann das liegen?
.. du musst die TabControl "DrawMode " Eigenschaft auf "OwnerDrawFixed" ändern.
Steve | |
Re: Tabpages enabled | | | Autor: PACoSys | Datum: 16.06.04 09:48 |
| Danke, funktioniert. War mir sicher, daß ich das eingestellt habe, war aber nicht so. Also nochmal danke.
Gru? Patrick
---
Wer nicht fragt, bleibt dumm. | |
Re: Tabpages enabled | | | Autor: Toolmaster | Datum: 09.09.06 14:56 |
| ist dieser weg in vb 2005 auch noch immer nötig? oder hat ms hier etwas nachgebessert?
grüße georg | |
Re: Tabpages enabled | | | Autor: FZelle (Moderator) | Datum: 11.09.06 08:53 |
| Es ist immer noch so. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|