Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0232: Mikro-Logger im Statuspanel

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Fenster

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
GUI

Der Vorschlag wurde erstellt am: 19.03.2008 21:52.
Die letzte Aktualisierung erfolgte am 19.03.2008 21:52.

Zurück zur Übersicht

Beschreibung  

Statuslogger verhält sich wie ein StatusPanel, nur dass er sich die letzten 15 oder 20 Einträge merken kann. Das ist etwa nützlich, wenn mehrere Files verarbeitet werden - die fehlerhaften können gemeldet werden. Die gemerkten Einträge sind als aufklappbare Menu-Items einsehbar.

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [14,60 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ---------- Anfang Projektgruppe StatusLogger.sln  ----------
' --------- Anfang Projektdatei StatusLogger.vbproj  ---------
' ------------- Anfang Datei frmStatusLogger.vb  -------------
' IDE-Voreinstellungen:
' Option Explicit On
' Option Strict On

' "My Project"-Einstellungen:
' Imports Microsoft.VisualBasic.ControlChars
' Imports System.Windows.Forms

Imports System.Xml
Imports System.Xml.Linq
Imports System.IO

Public Class frmStatusLogger

    Private _Status As StatusLogger

    Public Sub New()

        InitializeComponent()
        _Status = New StatusLogger(Me.StatusDropRoot, 15)

    End Sub

    Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _
        Menu1ToolStripMenuItem.Click, Menu2ToolStripMenuItem.Click, _
        Menu3ToolStripMenuItem.Click, Button1.Click, Button2.Click, Button3.Click, _
        Label1.Click

        Select Case True

            Case sender Is Menu3ToolStripMenuItem, sender Is Menu2ToolStripMenuItem, sender _
                Is Menu1ToolStripMenuItem

                _Status.Log("""", DirectCast(sender, ToolStripItem).Text, """ clicked")

            Case sender Is Button3, sender Is Button1
                _Status.Log("""", DirectCast(sender, Control).Text, """ clicked!")

            Case sender Is Button2
                _Status.Log("""", DirectCast(sender, Control).Text, """ clicked")

                ' (fictitious data-processing)
                Dim Xel = XElement.Load(New StringReader(My.Resources.TestXml))

                For Each Child In Xel.Elements

                    If Boolean.Parse(Child.@IsValid) Then

                        ' do something useful
                    Else

                        _Status.Log("invalid line: ", Child.ToString)
                    End If

                Next

                Me.Label1.Text = Xel.ToString

            Case sender Is Label1
                Me.Label1.Text = "oh, forgotten!"
                _Status.Log("Label1 clicked")

        End Select

    End Sub

End Class

' -------------- Ende Datei frmStatusLogger.vb  --------------
' --------------- Anfang Datei StatusLogger.vb ---------------
Public Class StatusLogger

    Private _RootDropDown As ToolStripDropDownButton
    Private _MaxLogEntries As Integer

    Public Sub New(ByVal DropDownButton As ToolStripDropDownButton, ByVal MaxEntries As Integer)

        _RootDropDown = DropDownButton
        _MaxLogEntries = MaxEntries

    End Sub

    Public Sub Log(ByVal ParamArray Args() As Object)

        Me._RootDropDown.Text = String.Concat(Args)

        With Me._RootDropDown.DropDownItems

            If .Count < _MaxLogEntries Then
                .Add(New ToolStripMenuItem)

            Else

                For i As Integer = 0 To _MaxLogEntries - 2
                    .Item(i).Text = .Item(i + 1).Text
                Next

            End If

            .Item(.Count - 1).Text = Me._RootDropDown.Text
        End With

    End Sub

End Class

' ---------------- Ende Datei StatusLogger.vb ----------------
' ---------- Ende Projektdatei StatusLogger.vbproj  ----------
' ----------- Ende Projektgruppe StatusLogger.sln  -----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.