StringBuilder verwenden

using System.Text; 

StringBuilder sb = new StringBuilder();
// Zeichen anhängen
sb.Append("Hans" + Environment.NewLine);
// Zeile anhägen
sb.AppendLine("Hilde");
// Zeichen einfügen
strB.Insert(0, "Udo");
// Zeichen ersetzen
strBuilder = strBuilder.Replace("Hans", "Horst");
// Zugriff auf die gesamte Zeichenfolge
Console.WriteLine(sb.ToString());
// Zeichen löschen
sb.Remove(0, sb.Length);
oder
sb.Length = 0;
oder
sb.Clear(); // ab .NET 4.0

Weitergabe von Crystal Reports

Um einen Crystal Report mit einer Anwendung weiterzugeben ist es notwendig, dass ein Setupprojekt erstellt wird, was folgendes enthält:

  • Anwendungsdateien
  • Berichtdateien (.rpt), diese sind Standardmäßig in der Assembly integriert
  • Crystal Reports-Mergemodule
  • .NET Framework

Durch das Erstellen eines Setup-Projektes für die Anwendung innerhalb von Visual Studio kann gewährleistet werden, dass alle benötigten Bibliotheken beim Installationsprozess verfügbar sind. Eine Anleitung befindet sich hier: Link

Editieren von ListView Items mittels TextBox

' auf dem Formular befindet sich ein ListView mit Namen ListView1
' alle Zellen des Formulars können editiert werden
Public Class Form1
    ' Textbox zum Editieren der Einträge
    Private _tbEdit As TextBox = New TextBox()
    Private _lvItemEdit As ListViewItem = Nothing
    Private _lvSubItemEdit As ListViewItem.ListViewSubItem = Nothing
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Textbox initialisieren
        _tbEdit.Visible = False
        ' Rahmen entfernen, damit die Textbox genau in die Zelle des ListViews passt
        _tbEdit.BorderStyle = BorderStyle.None
        ' Eventhandler für die Textbox hinzufügen
        AddHandler _tbEdit.Leave, AddressOf Me._tbEdit_Leave
        AddHandler _tbEdit.KeyPress, AddressOf Me._tbEdit_KeyPress
        ' der Form hinzufügen
        Me.Controls.Add(_tbEdit)
    End Sub
    
    Private Sub _tbEdit_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs)
        EndEditing(True)
    End Sub

    Private Sub _tbEdit_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)

        Select Case e.KeyChar
            Case Chr(Keys.Escape)
                EndEditing(False)
            Case Chr(Keys.Enter)
                EndEditing(True)
        End Select

    End Sub
    
    Private Sub EndEditing(ByVal AcceptChanges As Boolean)
        If Not IsNothing(_lvSubItemEdit) Then
            If (AcceptChanges) Then
                _lvSubItemEdit.Text = _tbEdit.Text
            End If
        End If

        ' muss vor _tbEdit.Visible = False gesetzt werden,
        ' da das Event ein zweites mal durch _tbEdit_Leave aufgerufen wird
        _lvItemEdit = Nothing
        _lvSubItemEdit = Nothing

        _tbEdit.Visible = False
    End Sub

   Private Sub ListView1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
        Dim htInfo As ListViewHitTestInfo = ListView1.HitTest(e.X, e.Y)

        _lvItemEdit = Nothing
        _lvSubItemEdit = Nothing

        If Not IsNothing(htInfo) Then

            If Not IsNothing(htInfo.Item) And Not IsNothing(htInfo.SubItem) Then

                Dim iCol = htInfo.Item.SubItems.IndexOf(htInfo.SubItem)

                ' Alles außer Spalte 1 editieren
                If (iCol > 0) Then

                    _lvItemEdit = htInfo.Item
                    _lvSubItemEdit = htInfo.SubItem

                End If

            End If

        End If

    End Sub

    Private Sub ListView1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
        If Not IsNothing(_lvItemEdit) And Not IsNothing(_lvSubItemEdit) Then
            ' Größe anpassen
            _tbEdit.Top = ListView1.Top + _lvSubItemEdit.Bounds.Top + 2
            _tbEdit.Left = ListView1.Left + _lvSubItemEdit.Bounds.Left + 2
            _tbEdit.Width = _lvSubItemEdit.Bounds.Width
            _tbEdit.Height = _lvSubItemEdit.Bounds.Height
            ' Inhalt übergeben
            _tbEdit.Text = _lvSubItemEdit.Text
            ' anzeigen
            _tbEdit.Visible = True
            _tbEdit.BringToFront()
            _tbEdit.Focus()
        End If
    End Sub
End Class

Eventhandling

' Fensterklasse
Public Class frmMyForm
    ' Objekt, das den Events auslöst, deklarieren
    ' Schlüsselwort "WithEvents" ist hierbei wichtig
    Private WithEvents MyMathObj As MathClass = New MathClass

    ' Funktion des Eventobjektes aufrufen, so dass letztendlich der Event angestoßen wird
    Private Sub AddValues()
        MyMathObj.Add(1, 2)
    End Sub

    ' Funktion, die durch den Event aufgerufen wird
    ' diese behandelt letztendlich den Event des MathClass-Objektes
    Private Sub ResultValue(ByVal sResult As String) Handles MyMathObj.ResultEvent
        Console.WriteLine(sResult)
    End Sub
End Class

' Beispielklasse, die den Event aufruft
Public Class MathClass
    ' Event, der ausgelöst wird deklarieren
    Public Event ResultEvent(ByVal sResult As String)

    ' Funktion, die den Event auslöst
    Public Sub Add(ByVal a As Integer, ByVal b As Integer)

        Dim sResult As String

        sResult = (a + b).ToString()

        ' Event aufrufen
        RaiseEvent ResultEvent(sResult)
    End Sub
End Class

Systemsounds abspielen

' möglich sind:
' Media.SystemSounds.Asterisk 
' Media.SystemSounds.Beep 
' Media.SystemSounds.Exclamation 
' Media.SystemSounds.Hand 
' Media.SystemSounds.Question 

My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)

Zugriff auf CrystalReport TextObjekte zur Laufzeit

  • der CrystalReport ist in ein CrystalReportViewer-Objekt auf dem Formular eingebettet
  • der Zugriff auf die Objekte im Report erfolgt über TypeCasts
' Reportobjekt erzeugen
Private rpt As MyReport = New MyReport()

' beim Erzeugen der Form dem CrystalReportViewer den Report zuweisen
Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    CrystalReportViewer1.ReportSource = rpt
End Sub

' beim Buttonklick den Text eines Labels im Report ändern
Private Sub btnChangeText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChangeText.Click
    Dim crTextObject As CrystalDecisions.CrystalReports.Engine.TextObject

    ' Section3 ... Sektion, in der das TextObjekt beim Erstellen abgelegt wurde
    ' Text1 ... Name, der im beim Erstellen des Reports in dessen Eigenschaftsfenster für das TextObjekt vergeben wurde
    crTextObject = CType(rpt.Section3.ReportObjects.Item("Text1"), CrystalDecisions.CrystalReports.Engine.TextObject)

    ' Text zuweisen
    crTextObject.Text = "neuer Text"
End Sub

Crystal Report verwenden

Crystal Report zum Projekt hinzufügen

  • Projekt->Hinzufügen->Neues Element->Crystal Reports-Bericht
  • wir verwenden beispielhaft den Namen “MyReport”
  • Visual Studio erstellt nun eine neue Crystal Report Datei “MyReport.rpt”

TextObjekt einfügen

  • in die gewünschte Section Rechtsklicken und Einfügen->TextObjekt wählen
  • bei Eigenschaften->Sonstiges->Name eine aussagekräftige Bezeichnung eingeben

Crystal Report anzeigen

  • Projekt->Hinzufügen->Windows Form
  • auf die Form einen CrystalReportViewer (zu finden in der Toolbox unter Crystal Reports) ziehen
  • in der Form-Load-Methode folgenden Code einfügen:
    Public Class frmReport
        ' Instanz des Reportobjekts erzeugen
        Private rpt As MyReport = New MyReport()
    
        ' beim Erzeugen der Form dem CrystalReportViewer den Report zuweisen
        Private Sub frmReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            CrystalReportViewer1.ReportSource = rpt
        End Sub
    End Class
    

ListViewItems einer Gruppe zuordnen

  • ab .Net Framework 2.0 hat ein ListView die zusätzliche Eigenschaft “Groups”
  • im Objekteditor kann man sich eine Liste mit Gruppen erstellen, zu welchen man einzelne ListViewItems zuordnen kann
  • die ListViewItems werden innerhalb der Gruppe im ListView unter einer Art Zwischenüberschrift angeordnet
' ListView hat im Beispiel 4 Spalten
Dim a As Double = 3.02
With ListView1.Items
    .Clear()
    .Add(New ListViewItem(New String() {"Name1", a.ToString("f2"), "°C", "-"}, lvListView.Groups(0))) ' 1. Gruppe
    .Add(New ListViewItem(New String() {"Name2", a.ToString("f2"), "kg", "-"}, lvListView.Groups(0))) ' 1. Gruppe

    .Add(New ListViewItem(New String() {"Name3", a.ToString("f2"), "kW", "-"}, lvListView.Groups(1))) ' 2. Gruppe
    .Add(New ListViewItem(New String() {"Name4", a.ToString("f2"), "min", "-"}, lvListView.Groups(1))) ' 2. Gruppe
End With