User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile
 Windows Mobile - Allgemeines
 "Link"-Label
Autor Vorheriges Thema Thema Nächstes Thema  

pda-dev

pda-dev

Forum Admin


554 Beiträge

Erstellt am: 25.05.2004 :  22:34:35 Uhr  Profil anzeigen  Autor eine Email senden  Besuche pda-dev's Homepage  Sende pda-dev eine ICQ Message  Antwort mit Zitat
Dieses Codebeispiel befasst sich mit einer platzsparenden Alternative zu dem recht "fett" geratenen Button-Steuerelement.
Wer viele Daten und Funktionen auf einem Formular im PDA-Format unterbringen muss, wird sich sicher schon einmal die Frage gestellt haben, wie sich das Benutzen eines unschönen und großen Buttons umgehen lässt.
Eine gute Idee wäre es zum Beispiel, die Navigation ähnlich wie im Internet über "Links" zu realisieren. Das ist für den Benutzer in den meisten Fällen intuitiv.
D.h. also wir brauchen ein Label mit blauer Schriftfarbe und unterstrichener Beschriftung. Das war's? Nein, denn wir stellen schnell fest, dass das Label kein Click-Ereignis empfangen kann! Was tun?
Nun, ganz einfach, wir gehen den Umweg über "Control" und basteln uns daraus ein eigenes Klick-Label mit den nötigsten Eigenschaften (FontName, FontSize, FontStyle, TextAlignment, BorderStyle):
 
'FILE : clsLinkLabel.vb
'CREATED : 25.5.2004, www.pda-dev.de
'DESCRIPTION : ein Label das wie ein Link aussieht und ein Click-
Ereignis besitzt (LabelCLick)
Imports System.Windows.Forms
Imports System.Drawing.Graphics
Imports System.Drawing
Public Class LinkLabel
Inherits Control
Private bStyle As BorderStyle = BorderStyle.None
Private txtAlignment As ContentAlignment = ContentAlignment.TopLeft
'Standard-Schrifteigenschaften
Private fntName As String = "MS Sans Serif"
Private fntSize As Integer = 8
'Schrift fett und unterstrichen wie ein Link
Private fntStyle As FontStyle = FontStyle.Bold + FontStyle.Underline
'Dieses Ereignis wird beim Klick ausgelöst!
Event labelClick(ByVal sender As Object, ByVal e As System.EventArgs)
'Falls benötigt, wird auch noch das Paint-Ereignis weitergegeben
Event labelPaint(ByVal sender As Object, ByVal e As System.EventArgs)
Public Sub New()
'Schriftfarbe ist und bleibt blau
MyBase.ForeColor = Color.Blue
End Sub
Public Property BorderStyle() As BorderStyle
Get
Return bStyle
End Get
Set(ByVal Value As BorderStyle)
bStyle = Value
End Set
End Property
Public Property FontName() As String
Get
Return fntName
End Get
Set(ByVal Value As String)
fntName = Value
End Set
End Property
Public Property FontSize() As Integer
Get
Return fntSize
End Get
Set(ByVal Value As Integer)
fntSize = Value
End Set
End Property
Public Property FontStyle() As FontStyle
Get
Return fntStyle
End Get
Set(ByVal Value As FontStyle)
fntStyle = Value
End Set
End Property
Public Property TextAlignment() As ContentAlignment
Get
Return txtAlignment
End Get
Set(ByVal Value As ContentAlignment)
txtAlignment = Value
End Set
End Property
'überschreibt text-eigenschaft, erwingt neu Zeichnen nach jedem ändern des Textes
Public Overrides Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal Value As String)
'wenn der angezeigte Text schon aktuell ist, können wir uns das Neu-Zeichnen sparen
If MyBase.Text = Value Then
Exit Property
End If
MyBase.Text = Value
Me.Refresh()
End Set
End Property
'im Paint-Ereignis wird der Text entsprechend den eingestellten
Eigenschaften formatiert auf das Steuerelement gezeichnet
Private Sub clsLabelPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles MyBase.Paint
Dim grfx As Graphics = e.Graphics
Dim p As New Pen(AppColor.Border)
Dim b As New SolidBrush(ForeColor)
Dim f As New Font(fntName, fntSize, fntStyle)
Dim s As SizeF
If Me.BorderStyle = BorderStyle.FixedSingle Then
grfx.DrawRectangle(p, 0, 0, Me.Width - 1, Me.Height - 1)
ElseIf Me.BorderStyle = BorderStyle.Fixed3D Then
grfx.DrawRectangle(p, Me.ClientRectangle)
End If
s = grfx.MeasureString(Me.Text, f)
Select Case txtAlignment
Case ContentAlignment.TopCenter
grfx.DrawString(Me.Text, f, b, (Me.Width - s.Width) / 2, (Me.Height - s.Height) / 2)
Case ContentAlignment.TopLeft
grfx.DrawString(Me.Text, f, b, 2, (Me.Height - s.Height) / 2)
Case ContentAlignment.TopRight
grfx.DrawString(Me.Text, f, b, Me.Width - s.Width - 2, (Me.Height - s.Height) / 2)
End Select
p.Dispose()
b.Dispose()
f.Dispose()
RaiseEvent labelPaint(sender, e)
End Sub
'hier wird das Klick-Ereignis ausgelöst
Private Sub clsLabelClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
RaiseEvent labelClick(sender, e)
End Sub
End Class
 
Natürlich lässt sich das Beispiel noch ausbauen und verbessern. Man könnte zum Beispiel nach Klick eines "Links" durch Ändern der Textfarbe einen "aktiven Link" daraus machen etc. pp.
Es gilt wie immer: Fragen und Anregungen sind erwünscht!

Ein Computer wird nie das tun, was du willst - sondern das, was du programmierst!
   
  Vorheriges Thema Thema Nächstes Thema  
Springe nach:
 
  Bookmark & Share  
 
 
 
  Tags  
 
Keine Tags gefunden
 
 
 



pda-dev.de

Quicklinks: Foren-Übersicht | Developer-News | Suche | Impressum

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000