Wer eigene UserControls unter VB6 programmiert hat, kennt sicherlich die AccessKeys-Eigenschaft. Über diese Eigenschaft lassen sich Buchstaben festlegen, auf die das Control in Verbindung mit der ALT-Taste reagieren kann. VB6 löste in diesem Fall das AccessKeyPress-Ereignis aus und das Control bekam den Fokus. Unter VB.NET gibt es leider keine AccessKeys-Eigenschaft! Wie man aber dennoch innerhalb des eigenen .NET Controls (abgeleitet von der Control-Klasse) auf bestimmte Zugriffstasten (ALT+Buchstabe) reagieren kann, das zeigen wir Ihnen in unserem heutigen Extra-Tipp. Stichpunkt: ProcessMnemonic Wir erstellen also ein neues Control und fügen diesem eine UseMnemonic-Eigenschaft hinzu, über die wir festlegen können, ob auf Zugriffstasten reagiert werden soll, oder nicht. Imports System.ComponentModel Public Class myControl Inherits Control ' Zugriffstasten berücksichtigen Private m_UseMnemonic As Boolean = False ''' <summary> ''' Ruft einen Wert ab, der angibt, ob das Steuerelement ein kaufmännisches ''' Und-Zeichen in der Text-Eigenschaft des Controls als Präfix für eine ''' Zugriffstaste interpretiert, oder legt diesen fest. ''' </summary> <DefaultValue(False)> _ Public Property UseMnemonic() As Boolean Get Return m_UseMnemonic End Get Set(ByVal value As Boolean) m_UseMnemonic = value Me.Invalidate() End Set End Property Public Overrides Property Text() As String Get Return MyBase.Text End Get Set(ByVal value As String) MyBase.Text = value Me.Invalidate() End Set End Property Private Sub myControl_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint ' Rahmen zeichnen e.Graphics.FillRectangle(New SolidBrush(MyBase.BackColor), Me.ClientRectangle) ' Hintergrund füllen Dim r As New Rectangle(Me.ClientRectangle.X, Me.ClientRectangle.Y, _ Me.ClientRectangle.Width - 1, Me.ClientRectangle.Height - 1) e.Graphics.DrawRectangle(Pens.Black, r) ' Textausgabe unter Berücksichtigung der UseMnemonic-Eigenschaft Dim flags As System.Windows.Forms.TextFormatFlags = _ TextFormatFlags.HorizontalCenter Or _ TextFormatFlags.VerticalCenter Or _ TextFormatFlags.WordEllipsis Or _ TextFormatFlags.EndEllipsis ' &-Zeichen darstellen? If Not m_UseMnemonic Then flags = flags Or TextFormatFlags.NoPrefix TextRenderer.DrawText(e.Graphics, MyBase.Text, MyBase.Font, _ Me.ClientRectangle, MyBase.ForeColor, flags) End Sub ' Zugriffstasten auswerten Protected Overrides Function ProcessMnemonic(ByVal charCode As Char) As Boolean If m_UseMnemonic Then If Control.IsMnemonic(charCode, Me.Text) Then MsgBox("Zugriffstaste wurde gedrückt!", MsgBoxStyle.Information) ' Mitteilen, dass das Ereignis behandelt wurde Return True End If End If Return MyBase.ProcessMnemonic(charCode) End Function End Class |