VB-Power.net

AccessKeys in eigenen .Net Controls


Klassenmodule
Erstellt am 04 Oct 2009
VB.Net Code-Snippets, Klassen und mehr... >> Klassenmodule

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
Dieses Event wird immer dann ausgelöst, wenn eine Zugriffstasten gedrückt wurde. Jetzt braucht man nur noch zu prüfen, ob es sich um die für das eigene Control festgelegte Zugriffstaste handelt.

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

Letzte Änderung: 04 Oct 2009 at 10:25

Zurück
TOP Download !!!

DataGridView Control Extender

Erweitern Sie Ihr DataGridView mit 16 zusätzlichen Spaltentypen.


Weiterlesen...


TOP 5 Downloads
WpfOSMMap7084
Explorer TreeView mit VB.Net - Beispielprojekt5049
DataGridView Control Extender incl. VB2008 Demoprojekt4807
MCIFramework.dll3408
DataGridView Control Extender incl. VB2005 Demoprojekt3085
Powered by:

Powered By VB-Power.net