locked
FAQ - Häufig gestellte Fragen zu Visual Basic .NET General RRS feed

Alle Antworten


  • Wie wird die Assembly von der CLR (Common Language Runtime) geladen ?

    Wenn eine .NET Anwendung läuft, beginnt die CLR (Common Language Runtime), die genaue Version einer Assembly einzubinden, mit der die Anwendung erstellt wurde. Sie verwendet die folgenden Schritte, um einen Verweis auf eine Assembly aufzulösen:

    Schritt 1: Untersuchen der Konfigurationsdateien
    Schritt 2: Suchen nach Assemblys, auf die zuvor verwiesen wurde
    Schritt 3: Durchsuchen des globalen Assemblycaches
    Schritt 4: Suchen der Assembly mit CodeBases oder durch Sondierung

    Lesen Sie den Folgenden Artikel für eine ausführliche Beschreibung über die oberen Schritte: http://msdn.microsoft.com/de-de/library/yx7xezcf.aspx

    Manchmal müssen Entwickler eine Assembly in die Laufzeit laden, die sich in jedem möglichem Ordner (nicht nur in den bin Ordner der Anwendung) befinden kann. Es gibt drei Methoden, um die Assembly während des Betriebes einzuführen:           

    • Installieren Sie die Assembly in dem Globalen Assembly Cache (GAC)
    • Verwenden Sie eine Konfigurationsdatei (.config) mit der CODEBASE Bezeichnung
    • Verwenden Sie das AssemblyResolve Ereignis

    Lesen Sie bitte diesen KB Artikel für eine ausführliche Erklärung und Schritt für Schritt Anleitung: http://support.microsoft.com/kb/837908

    [Nach oben]

    Donnerstag, 4. Februar 2010 16:13
    Moderator

  • Was für ein Unterschied gibt es zwischen ByVal und ByRef ?

    Wenn Sie eine Unterroutine oder eine Funktion schreiben, können Sie Variablen von Ihrem Hauptcode an dieser Unterroutine oder Funktion übergeben. Die Verwendung von ByVal oder ByRef ist der Standard Mechanismus für das Übergeben.

    Wenn Sie den Wert der Variable übergeben möchten, verwenden Sie die ByVal Syntax. Indem man den Wert der Variable anstelle des Verweises an die Unterroutine oder Funktion übergibt, werden keine Änderungen an der Variablen, die durch Code in der Unterroutine oder Funktion gebildet werden, zurück an dem Hauptcode übergeben.

    Wenn Sie den Wert der Variable in der Unterroutine oder in der Funktion ändern und den korrigierten Wert zurück an den Hauptcode übergeben möchten, verwenden Sie die ByRef Syntax. Diese übergibt den Verweis auf die Variable und erlaubt ihren Wert zu ändern und zurück an den Hauptcode zu übergeben.

    Zu mehr Information über das Übergeben von Argumenten durch Wert und durch Verweis, beziehen Sie sich bitte auf folgendes MSDN Dokument: http://msdn.microsoft.com/de-de/library/ddck1z30.aspx

    Schauen Sie den folgenden Codeschnipsel und sein Ergebnis an. Der Code erklärt eine Wertetyp Variable und eine Hinweistyp Variable. Nachher übergeben Sie die Variablen an die unterschiedlichen Unterroutinen, die das ByVal oder ByRef Schlüsselwort verwenden, um die Parameter zu ändern.

    Imports System.Security
    Imports System.Security.Permissions
    Imports System.IO
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim parameter_valtype As Integer = 10
            Dim parameter_refertype As demo = New demo(1, "Anfangswert")
    
            Console.WriteLine("Wert der Werttyp Variable [parameter_valtype]:" & parameter_valtype.ToString)
    
            Console.WriteLine("Werttyp Variable [parameter_valtype] mit ByVal-Modifizierer übergeben")
    
            passByval_valType(parameter_valtype)
    
            Console.WriteLine("Wert der Werttyp Variable [parameter_valtype]:" & parameter_valtype.ToString)
    
            Console.WriteLine("")
    
            Console.WriteLine("Werttyp Variable [parameter_valtype] mit ByRef-Modifizierer übergeben")
    
            passByref_valType(parameter_valtype)
    
            Console.WriteLine("Wert der Werttyp Variable [parameter_valtype]:" & parameter_valtype.ToString)
    
            Console.Write(vbCrLf)
    
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.WriteLine("Referenz-Typ-Variable [parameter_refertype] mit ByVal-Modifizierer übergeben und Reference Variable ändern ")
    
            passByval_refType_modifyvarialble(parameter_refertype)
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_referType]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.Write(vbCrLf)
    
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.WriteLine("Referenz-Typ-Variable [parameter_refertype] mit ByVal-Modifizierer übergeben")
    
            passByval_refType(parameter_refertype)
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.Write(vbCrLf)
    
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.WriteLine("Referenz-Typ-Variable [parameter_refertype] mit ByRef-Modifizierer übergeben")
    
            passByref_refType(parameter_refertype)
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.Write(vbCrLf)
    
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.WriteLine("Referenz-Typ-Variable [parameter_refertype] mit ByRef-Modifizierer übergeben und Reference Variable ändern")
    
            passByref_refType_modifyvarialble(parameter_refertype)
    
            Console.WriteLine("Wert der Referenz-Typ-Variable [parameter_refertype]: " & parameter_refertype.nummember.ToString & "  " & parameter_refertype.strmember)
    
            Console.Write(vbCrLf)
    
        End Sub
        Public Sub passByref_valType(ByRef i As Integer)
            i = i + 2
        End Sub
        Public Sub passByval_valType(ByVal i As Integer)
            i = i + 4
        End Sub
        Public Sub passByval_refType(ByVal d As demo)
            d.nummember = d.nummember * 2
            d.strmember = "passByval_refType"
        End Sub
        Public Sub passByval_refType_modifyvarialble(ByVal d As demo)
            d = New demo(11, "passByval_refType_Variable_ändern")
        End Sub
        Public Sub passByref_refType(ByRef d As demo)
            d.nummember = d.nummember * 2
            d.strmember = "passByref_refType"
        End Sub
        Public Sub passByref_refType_modifyvarialble(ByRef d As demo)
            d = New demo(d.nummember * 2, "passByref_refType_Variable_ändern")
        End Sub
    End Class
    Public Class demo
        Private _strmember As String = String.Empty
        Private _nummember As Integer = 0
        Public Sub New(ByVal num As Integer, ByVal str As String)
            _strmember = str
            _nummember = num
        End Sub
        Public Property strmember() As String
            Get
                Return _strmember
            End Get
            Set(ByVal value As String)
                _strmember = value
            End Set
        End Property
        Public Property nummember() As Integer
            Get
                Return _nummember
            End Get
            Set(ByVal value As Integer)
                _nummember = value
            End Set
        End Property
    End Class

    [Nach oben]
    Donnerstag, 4. Februar 2010 16:29
    Moderator

  • Wie erbt man ein vorhandenes Steuerelement (Benutzersteuerelement) und wie wird es der Werkzeugkiste (ToolBox) hinzugefügt ?

    Hier sind die Schritte:

    Schritt 1: Erstellen Sie Ihre eigenen Steuerelemente, indem Sie bestehende Windows Form-Steuerelementen erben (z.B. Button, TextBox, Label, etc.) File Menu - > New - > Project - > Windows Forms Controls

    In dem Code Editorprogramm ändern Sie die Grundklasse zum Steuerelement, von dem Sie erben möchten.

    Public Class UserControl1
        Inherits System.Windows.Forms.Button
    End Class
    Sie können alle spezifischen Methoden oder Eigenschaften einführen, die in Ihrem Steuerelement eingebaut werden. Errichten Sie das Projekt und erzeugen Sie eine DLL.

    Schritt 2: Fügen Sie das geerbte Steuerelement der Toolbox hinzu Right-click Toolbox -> Choose Item -> .NET Framework Components -> Klicken Sie auf den Browser Knopf, um dieses DLL zu lokalisieren und es zu addieren.

    Schritt 3: Das Steuerelement erscheint jetzt auf der Toolbox und Sie können es ziehen und ablegen (Drag & Drop) auf den Form Designer View.

    Anleitungen:

    Wie erbt man von der Control-Klasse: http://msdn.microsoft.com/de-de/library/skcysbt2.aspx

    Wie erbt man von der UserControl-Klasse: http://msdn.microsoft.com/de-de/library/00ctb4z0.aspx

    Wie erbt man von vorhandenen Windows Forms-Steuerelementen: http://msdn.microsoft.com/de-de/library/7h62478z.aspx

    [Nach oben]

    Freitag, 5. Februar 2010 07:06
    Moderator

  • Wie kann man eine .NET Komponente erstellen und als DLL verteilen ?

    Eine .NET Komponente ist eine spezielle Art von executable errichtet von einem .NET Projekt. Sie liefert eine programmierbare Schnittstelle, die durch die Verbraucheranwendungen erreicht wird (häufig genannt Client Anwendungen).

    Unternehmen Sie die folgenden Schritte, um eine .NET Komponente zu erstellen.

    1) Erstellen Sie ein neues Class Library Projekt.
    2) Um Ihre Eigenschaften herauszustellen, fügen Sie allgemeine Klassen mit allgemeinen Eigenschaften und Methoden hinzu.
    3) Kompilieren Sie das Class Library Projekt als DLL, indem Sie Build anklicken.

    Nach der Kompilation, kann die Anwendung die auf diese Komponente hinweist die Dienstleistungen von dieser Komponente verwenden. Beziehen Sie sich bitte auf den folgenden Artikel für eine ausführliche Beschreibung über das Erstellen einer .NET Komponente: http://msdn.microsoft.com/en-us/library/ms973807.aspx

    [Nach oben]

    Freitag, 5. Februar 2010 07:10
    Moderator

  • Wie kann man die Leistung einer Windows-Forms Anwendung verbessern ?

    Falls eine Windows-Forms Anwendung langsam funktioniert, dann finden Sie im folgenden Artikel ein paar Tipps zur Verbesserung der Leistung. http://msdn.microsoft.com/en-us/magazine/cc163630.aspx

    • Anwendung Startzeit verbessern
    • Abstimmung der Steuerelement Erstellung und Auffüllung
    • Verbesserung der Painting-Leistung
    • Text und Bilder Rendering
    • Effizientes Ressourcenmanagement

    Allgemein können Sie den worker Thread benutzen, um die zeitaufwendige Aufgaben im Hintergrund (BackgroundWorker-Klasse) durchzuführen und das verwaltete Objekt zeitlich auslösen, um weniger Speicherplatz und Ressourcen zu verwenden. Somit kann man diese für andere Prozesse zur Verfügung stellen.

    [Nach oben]

    Freitag, 5. Februar 2010 07:13
    Moderator

  • Wie lokalisiert man die Windows Anwendung ?

    Man muss die lokalisierten Ressourcendateien in das Projekt einbetten. Danach kompiliert der Compiler jede dieser lokalisierten Ressourcendateien in seine eigene unterschiedliche Assembly, die als Satellitenassemblies benannt werden. Die Satellitenassemblies enthalten nur lokalisierte Ressourcen. CLR (Common Language Runtime) basiert auf dem CurrentUICulture des aktuellen Thread, um die richtige Satellitenassembly zu laden und erhält die erforderlichen Ressourcen, um die Lokalisation einzuführen.

    Das Visual Studio Projektsystem gibt beträchtliche Unterstützung für die Ressourcendateien von Windows Form Anwendungen. Es gibt zwei Möglichkeiten, Ressourcendateien mit der Visual Studio Entwicklungsumgebung zu erzeugen: erstens, das Projektsystem und die Ressourcendateien für lokalisierende UI Elemente wie Text und Bilder auf dem Formular erzeugen. Die Ressourcendateien werden dann in Satellitenassemblies errichtet. Zweitens, eine Ressourcendatei Vorlage zu addieren und die Vorlage mit dem XML Designer dann zu editieren. Die zweite Option/Möglichkeit wird verwendet, um lokalisierende Reihungen zu bilden, die in den Dialogfeldern und in den Fehlermeldungen erscheinen.

    Zu mehr Information über die Lokalisierung von Windows Anwendung, Schritt fuer Schritt, beziehen Sie sich bitte auf folgendem Artikel:

    Exemplarische Vorgehensweise: Lokalisieren von Windows Forms: http://msdn.microsoft.com/de-de/library/y99d1cd3.aspx

    Ressourcen und Lokalisierung: http://msdn.microsoft.com/en-us/magazine/cc163609.aspx

    [Nach oben]

    Freitag, 5. Februar 2010 07:14
    Moderator

  • Welche Tipps gibt es, um eine ordnungsmäßige Implementierung von Multithreading in der VB.NET-Anwendung durchzuführen ?

    .NET Anwendungen können mehrfache Aufgaben durchführen, die gleichzeitig das Multithreading verwenden.  In den Multithreadingszenarien werden einzelne Aufgaben auf unterschiedlichen Threads durchgeführt. Damit werden die Leistung und das Reaktionsvermögen der Anwendungen verbessert. Im Allgemeinen müssen wir die folgenden Tipps merken, wenn wir Multithreading durchführen:

    Benutzen Sie die BackgroundWorker-Klasse. Sie führt einen Vorgang auf einem separaten Thread aus: http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker.aspx

    Teilen Sie die Daten zwischen mehrfachen Threads in der Anwendung. Wir müssen den Thread-Synchronisation-Mechanismus verwenden, um vermeiden, die Daten zu beschädigen.

    Ändern Sie die Eigenschaft des Formulars und seine Steuerelemente in der primären UI-Thread aus der Worker-Thread. Wenn der Code in der Worker-Thread die Eigenschaft des Formulars und seine Steuerelemente in der primären UI-Thread ändern wird, müssen wir die Control.Invoke-(oder BeginInvoke)-Methode verwenden, um den Aufruf an die richtigen primären UI-Thread zu marshallen.

    Debugging der Ausnahmen. Unbehandelte Ausnahmen in der Thread Funktion zwingen den Hostprozess sich zu beenden.

    Verwenden der Asynchronen-Methode Anforderung. Asynchrone-Methode Anforderung ist eine Eigenschaft, die durch CLR (Common Language Runtime) geliefert wird, und den Datenstrom der Ausführung in zwei Branchen aufspaltet. CLR führt diese Einheit ein, indem es eine Arbeit Warteschlange verwendet. Die Methode Parametern und die Zielmethode Adresse wird in eine Antraganzeige verpackt und steht diese Anzeige zu einer Prozess-breiten Arbeit Warteschlange an. CLR behält einen Thread-Pool bei, um jeden Antrag in dieser Warteschlange zu verarbeiten.

    Sie können die Asynchrone-Methode Anforderungsfunktion  in der .NET Anwendung über ein delegiertes Objekt benutzen. Über die Nutzung schauen Sie sich an den folgenden Kode Schnipsel.

    Imports System.Runtime.Remoting.Messaging
    Public Class Form1
    
        Public Delegate Function operationdelegate(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim obj As New demo1
            Dim num1 As Integer = 111
            Dim num2 As Integer = 124
            Dim del As operationdelegate
            del = New operationdelegate(AddressOf obj.add)
            del.BeginInvoke(num1, num2, AddressOf Oncallback, Nothing)
            del = New operationdelegate(AddressOf obj.subtract)
            MessageBox.Show(del.Invoke(num1, num2).ToString)
        End Sub
    
        Private Sub Oncallback(ByVal asynresult As IAsyncResult)
            Dim result As Integer = 0
            Dim obj As AsyncResult = CType(asynresult, AsyncResult)
            Dim c As operationdelegate = CType(obj.AsyncDelegate, operationdelegate)
            result = c.EndInvoke(asynresult)
            MessageBox.Show(result.ToString)
        End Sub
    
    End Class
    Public Class demo1
    
        Public Function add(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
            Return num1 + num2
        End Function
    
        Public Function subtract(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
            Return num1 - num2
        End Function
    End Class

    Zu mehr Information über Asynchrone-Methode Anforderung, beziehen Sie sich bitte auf folgenden Artikel:

     1) .NET Delegaten: Asynchrone Methode Anrufe in der .NET Umgebung erstellen http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

     2) Asynchrone-Methode Anforderung http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx

    Zu mehr Information über mehrere Tasks gleichzeitig in VB.NET ausführen, verweisen Sie auf MSDN Dokument Multithreading in .NET: http://msdn.microsoft.com/de-de/library/eed6swsx.aspx

    [Nach oben]

    Freitag, 5. Februar 2010 07:17
    Moderator

  • Wie leitet man den Standard Eingang/Ausgang-eines Prozesses um ?

    Sie müssen die Prozessklasse benutzen und die StandardInput und StandardOutput Eigenschaften einstellen, um diese Prozedur einzuführen. Überprüfen Sie bitte das Folgende Code Schnipsel.

    Imports System.IO
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            TextBox1.Multiline = True
    
            Dim p As New Process()
            Dim sw As StreamWriter
            Dim sr As StreamReader
            Dim err As StreamReader
            Dim psI As New ProcessStartInfo("cmd")
            psI.UseShellExecute = False
            psI.RedirectStandardInput = True
            psI.RedirectStandardOutput = True
            psI.RedirectStandardError = True
            psI.CreateNoWindow = True
            p.StartInfo = psI
            p.Start()
            sw = p.StandardInput
            sr = p.StandardOutput
            err = p.StandardError
            sw.AutoFlush = True
            If TextBox2.Text <> "" Then
                sw.WriteLine(TextBox2.Text)
            Else
                'execute default command 
                sw.WriteLine("dir \")
            End If
            sw.Close()
            TextBox1.Text = sr.ReadToEnd()
            TextBox1.Text += err.ReadToEnd()
    
        End Sub
    
    End Class

    [Nach oben]
    Freitag, 5. Februar 2010 07:21
    Moderator

  • Wie führt man Serial-COM Portkommunikation ein ?

    Sie können die SerialPort Klasse benutzen, um Serial-COM Portkommunikation einzuführen. Diese Klasse stellt ein serielles Schnittstellehilfsmittel dar. Sie liefert synchrones und Ereignis-abhängiges Input/Output, Zugang zu befestigen und abbrechen der Lagen und Zugang zu den Serientreibereigenschaften. Wir können eine Schnittstelledatei Ressource steuern, indem wir diese Klasse verwenden.

    Kode Probe: Daten von der seriellen Schnittstelle abfangen und auf UI Kontrollen anzeigen.

    Vorbedingungen: SerialPort1 und TextBox1 auf Form1.

    Public Class Form1
    
        Dim inputData As String = ""
        Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '//Werte für einige Eigenschaften
            SerialPort1.PortName = "COM1"
            SerialPort1.BaudRate = 9600
            SerialPort1.Parity = IO.Ports.Parity.None
            SerialPort1.DataBits = 8
            SerialPort1.StopBits = IO.Ports.StopBits.One
            SerialPort1.Handshake = IO.Ports.Handshake.None
            SerialPort1.RtsEnable = True
    
            '//Öffnen der seriellen Schnittstelle
            SerialPort1.Open()
    
            '//Schreibt Daten an der seriellen Schnittstelle
            If SerialPort1.IsOpen = True Then
                SerialPort1.Write("MicroCommand")
            End If
        End Sub
    
    
        Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, _
                          ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
                          Handles SerialPort1.DataReceived
            inputData = SerialPort1.ReadExisting '//oder SerialPort1.ReadLine
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
        End Sub
    
        Public Sub DoUpdate()
            TextBox1.Text = TextBox1.Text & inputData
        End Sub
    
        Private Sub Form1_FormClosed(ByVal sender As System.Object, _
                       ByVal e As System.Windows.Forms.FormClosedEventArgs) _
                       Handles MyBase.FormClosed
            '//Schließen der seriellen Schnittstelle
            SerialPort1.Close()
        End Sub
    
    End Class

    Anmerkung:
    http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived.aspx

    Das DataReceived Ereignis wird auf einem Sekundären Thread angehoben, wenn Daten vom Serial Port Objekt empfangen sind. Wenn man versucht, einige Elemente im Hauptthread (z.B. UI Elementen) zu ändern, könnte eine Threadausnahme auftreten, weil dieses Ereignis auf einem Sekundären Thread angehoben ist und nicht auf dem Hauptthread.

    Wenn es notwendig ist, Elemente in der Hauptform oder in der Kontrolle zu ändern, geben Sie diese Änderungen ein, mit Hilfe von Invoke, die die Arbeit über das korrekte Thread erledigt.

    System.IO.Ports.SerialPort Klasse Mitglieder (Eigenschaften, Methoden, Ereignisse, etc.) http://msdn.microsoft.com/de-de/library/system.io.ports.serialport_members.aspx

    Lesen Sie diesen Artikel für ausführliche Anweisungen: http://www.innovatic.dk/knowledg/SerialCOM/SerialCOM.htm

    [Nach oben]

    Freitag, 5. Februar 2010 07:25
    Moderator

  • Wie kann man eine Dateiextension mit der Anwendung verbinden ?

    Alle Dateityp-Anwendungen Extensionen werden im Register gespeichert. Um eine Dateiextension zu erstellen, die mit der Anwendung verbunden ist, muss man einen Register-Schlüssel schreiben um ihn zu registrieren.

    Z.B.: Eine Dateiextension erstellen, die „.Hallo“ genannt ist

    My.Computer.Registry.ClassesRoot.CreateSubKey(".Hallo").SetValue("", "Hallo", Microsoft.Win32.RegistryValueKind.String)
    My.Computer.Registry.ClassesRoot.CreateSubKey("Hallo\shell\open\command").SetValue("", Application.ExecutablePath & " ""%1"" ", Microsoft.Win32.RegistryValueKind.String)

    Erklärung zum obigen Code Beispiel:

    Kode

    Funktion

    CreateSubKey (".Hallo")

    Erstellt einen Registerschlüssel in ClassesRoot für die .Hallo Extension. Beachten Sie, dass Sie den Anfangspunkt einschließen müssen.

    .SetValue ("","Hallo"…

    1. "" (Oder Nothing) stellt den Default-Wert des Schlüssels ein.

    2. "Hallo" erklärt, welcher Registerschlüssel die Informationen über die .Hallo Extension enthält.

    CreateSubKey ("Hallo" & _

     \shell\open\command")

    Dieses erstellt den "Hallo" unter-Schlüssel und den  „shell\ open\command“ unter-Schlüssel, der erforderlich ist, den Weg zur Anwendung zu speichern, die diesen Dateityp öffnet.

    .SetValue ("", Application.ExecutablePath & _ " "" %1"" ",…

    1. "" (Oder Nothing) erklärt der Anwendung, den Default-Wert des Schlüssels einzustellen.

    2. Application.ExecutablePath erklärt der Anwendung, z.Z. laufender executable mit diesem Dateityp zu verbinden.

    3. " ""%1"" " übergibt die Position der geöffneten Datei zu dem Programm. Die Anführungsstriche sind
    beliebig freigestellt, aber, wenn Sie mehr als ein Argument haben, müssen Sie jedes einzelne Argument setzen.

    Ausführliches Walk-Through und Demoprojekt kann hier gefunden werden: http://www.codeproject.com/useritems/VBFileAssociation.asp

    [Nach oben]

    Freitag, 5. Februar 2010 07:27
    Moderator

  • Wie spielt man eine Flash Datei (.swf) in der WinForm ab ?

    Um eine Flash Datei (.swf) auf WinForm abzuspielen, finden Sie hier zwei Möglichkeiten:

    1)    Benutzen Sie eine AxWebBrowser Komponente

    Recht-Klicken auf der ToolBox → „Choose Items“ … auswählen → COM Components Registerkarte auswählen → „Microsoft Web Browser“ auswählen.

    Jetzt erscheint der Microsoft Web Browser auf der Toolbox. Die Komponente auf die Form ziehen und die .swf Datei spezifizieren.

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.AxWebBrowser1.Navigate("D:\flash.swf")
        End Sub

    2)    Benutzen Sie ein Shockwave Flash Objekt

    Zuerst stellen Sie bitte sicher, dass Adobe Macromedia Flash Player  installiert ist.

    Recht-Klicken auf der ToolBox → „Choose Items“ … auswählen → COM Components Registerkarte auswählen → Shockwave Flash Objekt auswählen.

    Jetzt erscheint die Kontrolle, die „Shockwave Flash Objekt“ genannt wird, in der Toolbox. Die Komponente auf die Form ziehen und die .swf Datei für die Film Eigenschaft spezifizieren.

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.AxShockwaveFlash1.Movie = "D:\flash.swf"
        End Sub
    

    [Nach oben]

    Freitag, 5. Februar 2010 07:32
    Moderator

  • Wie spielt man Audio-/Videodateien in VB.NET ab ?

    Hier sind vier Möglichkeiten:

    1) Eine Microsoft.DirectX.AudioVideoPlayback Komponente verwenden

    Zuerst müssen Sie das DirectX SDK installieren.

    DirectX 9.0c Redistributable

    DirectX 9.0 SDK Update

    Gehe Sie im Solution Explorer unter References → Add Reference und fügen Sie Microsoft.DirectX.AudioVideoPlayback.dll auf Ihrem Projekt hinzu.

    Verwenden Sie diesen Code, um eine Audiodatei im Hintergrund abzuspielen:

    Imports Microsoft.DirectX.AudioVideoPlayback   
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim audioFile As Audio = New Audio("D:\MyMusic.mid")
            audioFile.Play()
        End Sub
    End Class

    Verwenden Sie diesen Code, um eine Videodatei auf eine Panel Kontrolle abzuspielen:

    Imports Microsoft.DirectX.AudioVideoPlayback   
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim videoFile As Audio = New Audio("D:\Video1.avi")
            videoFile.Owner = Panel1
            videoFile.Play()
    
        End Sub
    End Class

    Demo: Das Abspielen von AVI Dateien mit Hilfe von DirectX 9 mit C # und .NET

    2) Eine Windows Media Player Kontrolle verwenden

    Recht-Klicken auf Toolbox → Choose Items → COM Components Registerkarte → „Windows Media Player“ ActiveX Kontrolle lokalisieren und addieren

    Nachher erscheint die „Windows Media Player“ Kontrolle in der Toolbox. Ziehen Sie die Kontrolle auf die Form, um eine AxWindowsMediaPlayer1 Kontrolle zu erzeugen, und spezifizieren Sie die Audio- oder VideoDatei für die URL Eigenschaft.

    AxWindowsMediaPlayer1.URL = “D:\VideoOrAudio.wmv“

    Die Media Player Kontrolle spielt automatisch die Datei standardmäßig ab.

    3) Eine RealPlayer ActiveX Kontrolle verwenden

    Eine COM Komponente änlich addieren : RealPlayer ActiveX Control Library zur Toolbox addieren und die Komponente auf die Form ziehen, um eine AxRealAudio1 Kontrolle zu erzeugen und die Audio- oder Videodatei für Source Eigenschaft spezifizieren. 

    AxRealAudio1.Source = “D:\VideoOrAudio.wmv“
    AxRealAudio1.AutoStart = True

    4) Die My.Computer.Audio.Play Methode verwenden

    Dieser Weg ist einfacher, aber man kann nur .wav Dateien abspielen.

    My.Computer.Audio.Play (“C:\audio.wav“, AudioPlayMode.Background)
    My.Computer.Audio.Stop()

    [Nach oben]

    Freitag, 5. Februar 2010 07:40
    Moderator

  • Wie speichert man eine Webseite in VB.NET ?

    Hier sind einige Möglichkeiten:

    1) Sie können eine Webseite als .html Datei mit der System.Net.WebClient Klasse direkt speichern.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim myWebClient As New System.Net.WebClient
    myWebClient.DownloadFile("http://social.msdn.microsoft.com/forums/de-De/categories/", "C:\Temp\msdn.html")
    
    End Sub

    2) Sie können komplette Webseiten als .mht Datei mit CDO und ADODB Komponenten speichern.

    In Solution Explorer → References → Rechtsklick → Add Reference → COM Registerkarte und dann wählen Sie „Microsoft CDO For Windows 2000 Library“ und „Microsoft ActiveX Data Objects 6.0 Library“.

    Imports ADODB
    Imports CDO
    
    Public Class Form1
    
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            SavePage("http://social.msdn.microsoft.com/forums/de-De/categories/", "C:\Temp\msdn.mht")
        End Sub
        Private Sub SavePage(ByVal Url As String, ByVal FilePath As String)
    
            Dim iMessage As CDO.Message = New CDO.Message
            iMessage.CreateMHTMLBody(Url, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "")
    
            Dim adodbstream As ADODB.Stream = New ADODB.Stream
            adodbstream.Type = ADODB.StreamTypeEnum.adTypeText
            adodbstream.Charset = "US-ASCII"
            adodbstream.Open()
            iMessage.DataSource.SaveToObject(adodbstream, "_Stream")
            adodbstream.SaveToFile(FilePath, ADODB.SaveOptionsEnum.adSaveCreateOverWrite)
        End Sub
    End Class

    3) Sie können mittels WebBrowser Kontrolle den Inhalt der Webseite speichern.

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            WebBrowser1.Navigate("http://social.msdn.microsoft.com/forums/de-De/categories/")
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            '//html Code speichern als .html Datei
            Dim MSDNpage As String = WebBrowser1.DocumentText
            My.Computer.FileSystem.WriteAllText("C:\Temp\msdn1.html", MSDNpage, True)
    
            '//Body Text speichern als .txt Datei
            Dim MSDNpage2 As String = WebBrowser1.Document.Body.InnerText
            My.Computer.FileSystem.WriteAllText("C:\Temp\msdn2.txt", MSDNpage2, True)
    
        End Sub
    End Class

    [Nach oben]

    Freitag, 5. Februar 2010 07:45
    Moderator

  • Wie öffnet/sieht man Office Dokumente (Word, Excel, PowerPoint), in einer VB.NET Form ?

    Visual Basic .NET liefert keine OLE Kontrolle, die ein Office Dokument in eine Form einbetten lässt. Hier gibt es eine Möglichkeit dieses zu erreichen:

    Verwenden Sie die WebBrowser Kontrolle in Visual Basic, um ein Office Dokument zu öffnen

    Detail: http://support.microsoft.com/kb/304643

    [Nach oben]

    Freitag, 5. Februar 2010 07:47
    Moderator

  • Wie ruft man Hardwareinformationen über WMI ab?

    Erstens klicken auf Solution Explorer → References → rechtsklick auf Add Reference → System.Management auswählen und danach in den Code die Zeile Imports System.Management eingeben.

    Beispiel: Hardwareinfo von der Festplatte, vom Motherboard und von CPU abrufen.

    Vorbedingungen: Drag&drop Button1, Button2, Button3 und ListBox1 auf Form1.

    Imports System.Management
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            '//Hardware Model und Type info
            Dim searcher As ManagementObjectSearcher = _
                            New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
            For Each wmi_HD As ManagementObject In searcher.Get()
                ListBox1.Items.Add("Model:" & vbTab & wmi_HD("Model").ToString())
                ListBox1.Items.Add("Type:" & vbTab & wmi_HD("InterfaceType").ToString())
            Next wmi_HD
    
            ''//Hardware SerialNumber info
            searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
            For Each wmi_HD As ManagementObject In searcher.Get()
                If wmi_HD("SerialNumber") Is Nothing Then
                    ListBox1.Items.Add("Serial No:" & vbTab & "None")
                Else
                    ListBox1.Items.Add("Serial No:" & vbTab & wmi_HD("SerialNumber").ToString())
                End If
            Next wmi_HD
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim searcher As ManagementObjectSearcher = _
                            New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")
            For Each oReturn As ManagementObject In searcher.Get()
                ListBox1.Items.Add( _
                 "MortherBoard Serial No." & Constants.vbTab & ": " & oReturn("SerialNumber").ToString)
            Next oReturn
    
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim searcher As ManagementObjectSearcher = _
                            New ManagementObjectSearcher("SELECT * FROM Win32_Processor")
            For Each oReturn As ManagementObject In searcher.Get()
                ListBox1.Items.Add("CPU ID" & Constants.vbTab & ": " & oReturn("ProcessorId").ToString)
            Next oReturn
        End Sub
    End Class

    Zusätzlich ist das WMI Tool zur Schaffung von Code hier zum Herunterladen:

    http://www.microsoft.com/downloads/details.aspx?familyid=2CC30A64-EA15-4661-8DA4-55BBC145C30E&displaylang=en

    Das WMI Tool zur Schaffung von Code ermöglicht VBScript, C# und VB.NET Code zu erzeugen, der WMI verwendet, um Managementaufgaben durchzuführen wie z.B. Anfragen von Managementdaten, Durchführung einer Methode von einer WMI Klasse oder empfangen von Ereignismitteilungen mit WMI.

    [Nach oben]

    Freitag, 5. Februar 2010 07:51
    Moderator

  • Wie wird ein Bild auf das PictureBox-Steuerelement bzw. auf das Image-Objekt gezeichnet ?

    Der Schlüssel ist, das korrekte Grafikobjekt zu finden.

    Vorbedingungen: Drag&drop PictureBox1, Button1 und Button2 auf Form1. 

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            PictureBox1.Image = Image.FromFile("C:\Temp\image001.jpg")
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim newImage As Image = Image.FromFile("C:\Temp\image001.jpg")
            Dim g As Graphics = Me.PictureBox1.CreateGraphics
            g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim newImage As Image = Image.FromFile("C:\Temp\image001.jpg")
            Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
            g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
            PictureBox1.Refresh()
        End Sub
    
    End Class
    

    [Nach oben]

    Freitag, 5. Februar 2010 07:59
    Moderator

  • Wie konvertiert man zwischen einem Image-Objekt und dem Byte-Array ?

    Sie können mittels MemoryStream-Klasse zwischen ein Image-Objekt und Byte-Array konvertieren.

    Imports System.IO
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myImage As Image = Image.FromFile("C:\Temp\image001.jpg")
            Dim imgByteArray As Byte() = Nothing
    
            'Image --> byte[]      
            Dim imgMemoryStream As MemoryStream = New MemoryStream()
            myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg)
            imgByteArray = imgMemoryStream.GetBuffer()
    
            'Byte[] --> image      
            imgMemoryStream = New MemoryStream(imgByteArray)
            myImage = Drawing.Image.FromStream(imgMemoryStream)
    
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 5. Februar 2010 08:03
    Moderator

  • Wie ändert man bei gleichem Maßstab die Größe eines Bildes ?

    Eine neue Bitmap mit einer neuen Größe erstellen, danach die ursprüngliche Bitmap auf dem neuen Bitmap-Objekt zeichnen.

    Vorbedingungen: Drag&drop Button1, PictureBox1 und PictureBox2 auf Form1.

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            resizeImage(PictureBox1.ImageLocation, PictureBox1)
            resizeImage(PictureBox2.ImageLocation, PictureBox2)
        End Sub
        Public Sub resizeImage(ByVal imgPath As String, ByVal picbox As PictureBox)
            '//Erhalten Sie die Source-bitmap
            Dim bm_source As Bitmap = New Bitmap(imgPath)
            '//Das Ausmaß der Quelle Bitmap aufzeichnen
            Dim scale As Double = bm_source.Height / bm_source.Width
            '//Machen Sie eine neue bitmap
            Dim bm_dest As New Bitmap(CInt(picbox.Width), CInt(picbox.Width * scale))
            '//Machen Sie ein Graphics-Objekt für die neue Bitmap
            Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)
            '//Kopieren Sie das Quellbild in der Ziel-bitmap
            gr_dest.DrawImage(bm_source, 0, 0, bm_dest.Width + 1, bm_dest.Height + 1)
            '//Die neue Bitmap in PictureBox anzeigen  
            picbox.Image = bm_dest
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            PictureBox1.ImageLocation = "C:\Temp\image001.jpg"
            PictureBox2.ImageLocation = "C:\Temp\image002.jpg"
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 5. Februar 2010 08:07
    Moderator

  • Was bedeutet Platform Invoke Service (P/Invoke) ?

    Platform Invoke ist ein Service, der durch CLR (Common Language Runtime) geliefert wird.

    Wir verwenden diesen Service, um nicht verwaltete DLL Funktionen (Win32 Funktionen) vom verwalteten Code  zu rufen.

    Zu mehr Information über P/Invoke, lesen Sie Interaktion mit nicht verwaltetem Code.

    Lesen Sie auch Marshaling between Managed and Unmanaged Code über Daten Marshaling mit Hilfe von P/Invoke. Im letzten Teil dieses Artikels können Sie das Werkzeug P/Invoke Interop Assistant finden, um Ihnen zu helfen die korrekten Funktion Signaturen zu verwenden beim rufen von P/Invoke.

    [Nach oben]

    Freitag, 19. Februar 2010 14:13
    Moderator

  • Wie registriert man einen Hotkey in VB.NET ?

    Erstens müssen Sie die Virtual-Key Kodes kennen.

    http://msdn.microsoft.com/en-us/library/ms927178.aspx

    Sie können dann P/Invoke RegisterHotKey/UnregisterHotKey APIs verwenden um den Hotkey zu registrieren/nicht zu registrieren.

    Beispiel: Mehrfache Hotkeys registrieren wie z.B. Alt+D, Alt+C, etc.

    Imports System.Runtime.InteropServices
    Public Class Form1
    
        Public Const MOD_ALT As Integer = &H1 '//Alt key
        Public Const WM_HOTKEY As Integer = &H312
    
         _
        Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
                            ByVal id As Integer, ByVal fsModifiers As Integer, _
                            ByVal vk As Integer) As Integer
        End Function
         _
       Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                           ByVal id As Integer) As Integer
        End Function
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
            RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
        End Sub
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            If m.Msg = WM_HOTKEY Then
                Dim id As IntPtr = m.WParam
                Select Case (id.ToString)
                    Case "100"
                        MessageBox.Show("Sie haben Tastenkombination ALT+D gedrückt")
                    Case "200"
                        MessageBox.Show("Sie haben Tastenkombination ALT+C gedrückt")
                End Select
            End If
            MyBase.WndProc(m)
        End Sub
    
        Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            UnregisterHotKey(Me.Handle, 100)
            UnregisterHotKey(Me.Handle, 200)
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 19. Februar 2010 14:21
    Moderator

  • Setup der Maus-Hook und Tastatur-Hook

    Um einen Low Level Maus- und Tastaturhook in VB.NET aufzubauen, verwenden wir P/Invoke um Windows API SetWindowsHookEx, CallNextHookEx, UnhookWindowsHookEx und GetModuleHandle zu rufen.

    Wenn wir den Low Level Maus- oder Tastaturhook stoppen möchten, können wir die UnhookWindowsHookEx Funktion verwenden, um das eingestellte Hook-Verfahren zu entfernen.  Der Parameter ist der Haken Identifikation, die wir von der SetWindowsHookEx Funktion erhalten.

    Hier ein Artikel auf diesem Thema von Paul Kimmel: http://www.developer.com/net/net/article.php/11087_2193301_1

    [Nach oben]

    Freitag, 19. Februar 2010 14:25
    Moderator

  • Was ist COM Interop ?

    COM Interop ist ein Service, der vom CLR (Common Language Runtime) geliefert wird.

    Sie wird verwendet, um die COM Komponenten in .NET Code zu verwenden. Eine COM Komponente wurde benutzt, um eine Anwendung mit Komponenten zu erstellen, bevor der .NET Framework erschien.

    Dieser Service ermöglicht die Interaktion zwischen verwalteten Anwendungen und nicht verwalteten COM Komponenten einwandfrei zu laufen.

    Wir können das COM Komponente Ereignis in der .NET Anwendung auch behandeln oder den .NET Objekt der COM Klient Anwendung durch COM Interop verfügbar machen.

    Lesen Sie das MSDN Dokument zu mehr Information über COM Interop.

    Einführung in COM-Interop: http://msdn.microsoft.com/de-de/magazine/cc163494.aspx

    [Nach oben]

    Freitag, 19. Februar 2010 14:30
    Moderator

  • Wie adressiert man eine VB6-DLL in einer VB.NET Anwendung ?

    Schritt 1: In Visual Basic 6 erstellen Sie eine ActiveX DLL Anwendung, die aus einer Public Klasse mit Public Methoden besteht. Diese Anwendung kann man dann in Visual Basic .NET aufrufen. Kompilieren Sie das Projekt in ein DLL.

    Dieser Artikel liefert ein Walk-through und ein Demoprojekt →http://www.vb-helper.com/howto_net_use_vb6_dll.html

    Dieses Beispiel errichtet ein Projekt, das VB6Project genannt wird. Es hat eine Public Klasse, die MyVB6Class genannt wird mit einer Public Subroutine die VB6SayHi genannt wird und eine Public Funktion VB6ReturnHi genannt. 

    Schritt 2: Das DLL auf dem Zielcomputer registrieren

    Start menu → Run dialog → die Anweisung ausführen:

    regsvr32 VB6Project.dll

    Schritt 3: Einen Verweis auf dieses VB6 DLL im VB.NET Projekt hinzufügen.

    Ein Visual Basic .NET Projekt starten → Project Menu auswählen → Add Reference → die COM Registerkarte Klicken → das DLL finden oder den Browse Knopf klicken, um es auszuwählen (z.B. VB6Project.dll).

    Schritt 4: Die .NET Anwendung kann die Public Klassen des DLLs wie folgt benutzen:

    	Dim vb6_class As New VB6Project.MyVB6Class
    	    vb6_class.VB6SayHi()
    

    [Nach oben]

    Freitag, 19. Februar 2010 14:38
    Moderator

  • Wie verwendet man Word-Automatisierung in VB.NET ?

    Einen Verweis auf die “Microsoft Word Object Library” COM Komponente in Ihr Projekt hinzufügen.

    Beispiel: Ein neues Word Dokument erstellen, eine 3 x 5 Tabelle einfügen und mit spezifischen Daten ausfüllen. Nachher speichern. 

    Imports Word = Microsoft.Office.Interop.Word
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            '//Word Anwendung erstellen
            Dim oWord As Word.Application = CreateObject("Word.Application")
            '//Neues Word Dokument erstellen
            Dim oDoc As Word.Document = oWord.Documents.Add()
            oWord.Visible = True
    
            '//eine Tabelle 3 x 5 einsetzen und füllen mit spezifischen Daten
            Dim r As Integer, c As Integer
            Dim oTable As Word.Table = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 3, 5)
            oTable.Range.ParagraphFormat.SpaceAfter = 6
            For r = 1 To 3
                For c = 1 To 5
                    oTable.Cell(r, c).Range.Text = "Row" & r & "Col" & c
                Next
            Next
            'make the first row bold and italic
            oTable.Rows.Item(1).Range.Font.Bold = True
            oTable.Rows.Item(1).Range.Font.Italic = True
            '//Speichern das Word Dokument
            oDoc.SaveAs("C:\Temp\myfile.doc", True)
            oDoc.Close()
            oWord.Application.Quit()
    
        End Sub
    End Class
    

    Das Ergebnis in C:\Temp\myfile.doc ist folgendes:

    Row1Col1

    Row1Col2

    Row1Col3

    Row1Col4

    Row1Col5

    Row2Col1

    Row2Col2

    Row2Col3

    Row2Col4

    Row2Col5

    Row3Col1

    Row3Col2

    Row3Col3

    Row3Col4

    Row3Col5

    KB: Wie man Microsoft Word mittels Visual Basic.NET automatisiert, um ein neues Dokument zu erstellen
    http://support.microsoft.com/kb/316383/de

    [Nach oben]

    Freitag, 19. Februar 2010 14:43
    Moderator

  • Wie verwendet man Excel-Automatisierung in VB.NET ?

     Einen Verweis auf die “Microsoft Excel Object Library” COM Komponente in Ihr Projekt hinzufügen.

    Beispiel: Wert der Zelle aus der Excel-Tabelle lesen bzw. in die Excel-Tabelle schreiben.

    Imports Microsoft.Office.Interop.Excel
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim oExcel As Object = CreateObject("Excel.Application")
            Dim oBook As Object = oExcel.Workbooks.Open("C:\Robert\Book1.xls")
            Dim oSheet As Object = oBook.Worksheets(1)
            '//Lesen der A2 Zelle   
            Dim cellValue As String = oSheet.Range("A2").Value
            '//Wert in A2 Zelle ändern
            oSheet.Range("A2").Value = ""
            '//Speichern das Excel Dokument
            oBook.SaveAs("C:\Temp\Book1.xls", True)
            oExcel.Quit()
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 19. Februar 2010 14:49
    Moderator

  • Wie automatisiert man eine Webseite (z.B. Seitentext abrufen, Login Webseite, suchen, Klickknopf oder Hypertext-Link) durch den Webbrowser ?

    Grundprinzip:

    Erstens, eine Webseite auf einem Webbrowserobjekt laden, danach die GetElementsByTagName oder GetElementsByID Funktion verwenden, um die Webseite Elementen im WebBrowser.Document zu finden und sie zu automatisieren (z.B. Seitentext abrufen, Login Webseite, suchen, Klickknopf oder Hypertext-Link). 

    Vorher müssen Sie den HTML Quellcode der Web Elementen herausfinden (Recht-Klicken auf Webseite → „View Source“ Menüeintrag).

    Z.B.: Wie loggt man automatisch in eine Webseite ein (Benutzername/Kennwort eingeben und auf den Login-Knopf klicken)?

    Nehmen Sie an, dass diese Seite http://www.website.com/login.aspx die folgenden Elemente hat:

    <input name="UserNameTextBox" type="text" value="myUser" id="UserNameTextBox">

    <input name="PasswordTextBox" type="text" value="myUser" id="PasswordTextBox">

    <INPUT type=submit value="Login" name="LoginButton">

    Vorbedingungen: Drag & Drop WebBrowser1 Komponente auf Form1.

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '//Teil 1: Verwendung der WebBrowser Kontrolle um eine Webseite zu laden
            WebBrowser1.Navigate("http://www.website.com/login.aspx")
    
            System.Threading.Thread.Sleep(2000) '//Verzögerung von 2 Sekunden, damit die Login-Seite gerendert werden soll
    
            '//Teil 2: Automatisch Benutzername und Passwort einfügen
            Dim theElementCollection As HtmlElementCollection
            theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
            For Each curElement As HtmlElement In theElementCollection
                Dim controlName As String = curElement.GetAttribute("name").ToString
                If controlName = "UserNameTextBox" Then
                    curElement.SetAttribute("Value", "Hier Benutzername Text")
                ElseIf controlName = "PasswordTextBox" Then
                    curElement.SetAttribute("Value", "Hier Kennwort Text")
                    '//Darüber hinaus erhalten Sie Elementwert wie folgt:
                    'MessageBox.Show(curElement.GetAttribute("Value"))
                End If
            Next
    
            '//Teil 3: Automatish den Loginknopf anclicken
            theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
            For Each curElement As HtmlElement In theElementCollection
                If curElement.GetAttribute("value").Equals("Login") Then
                    curElement.InvokeMember("click")
                End If
            Next
    
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 19. Februar 2010 14:55
    Moderator

  • Wie erstellt man einen eigenen Webbrowser ?

    Wir erstellen normalerweise unseren eigenen Webbrowser mithilfe der vorhandenen Webbrowser Kontrolle, die einige Grundfunktionen für die Navigation liefert.

    Z.B.: Einen einfachen Webbrowser erstellen

    Drag & Drop eine TextBox Kontrolle, die als Adressleiste dient.

    Drag & Drop eine ToolStrip Kontrolle, irgendwelche ToolStripButtons addieren, wie z.B. Go, Back, Forward, Stop, Refresh, etc

    Public Class Form1
    
        Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
            WebBrowser1.Navigate(txtURL.Text)
        End Sub
    
        Private Sub tsBtnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsBtnBack.Click
            If WebBrowser1.CanGoBack Then
                WebBrowser1.GoBack()
            End If
        End Sub
    
        Private Sub tsBtnForward_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsBtnForward.Click
            If WebBrowser1.CanGoForward Then
                WebBrowser1.GoForward()
            End If
        End Sub
    
        Private Sub tsBtnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsBtnStop.Click
            WebBrowser1.Stop()
        End Sub
    
        Private Sub tsRefreshNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsRefreshNormal.Click
            WebBrowser1.Refresh()
        End Sub
    
        Private Sub tsBtnHome_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsBtnHome.Click
            WebBrowser1.GoHome()
        End Sub
    
        Private Sub tsBtnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsBtnSearch.Click
            WebBrowser1.GoSearch()
        End Sub
    	
    End Class
    

    [Nach oben]

    Freitag, 19. Februar 2010 15:02
    Moderator

  • Wie fügt man dem eigenen Webbrowser die Favoriten/Lesezeichen und Tabbed-Funktionen hinzu ?

    1)    Um Favoriten/Lesezeichen in Ihrem eigenen Webbrowser hinzuzufügen, können Sie My.Settings verwenden (wählen Sie System.Collections.Specialized.StringCollection Datenart) um alle Einzelteile der Favoriten oder der Lesezeichen zu speichern.

    Z.B.: Führen Sie die Favoriten Eigenschaft für Ihren Web Browser ein.

    Erstens, eine neue Settings Variable erstellen:

    Project → Properties → Settings → eine Einstellung wie unten erstellen

    Name=favList

    Type= System.Collections.Specialized.StringCollection

    Scope=User

    Value (stellen Sie einige Initialeinträge ein)

    Vorbedingungen: Drag & Drop MenuStrip1 (mit ToolStripMenuItem1 und ToolStripMenuItem2) und WebBrowser1 auf Form1

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ToolStripMenuItem1.Text = "Favorites"
            ToolStripMenuItem2.Text = "Addieren"
            WebBrowser1.Navigate("http://www.microsoft.com")
    
            '//Settings in Favorites laden   
            For Each item As String In My.Settings.favList
                Dim menuItem1 As New ToolStripMenuItem
                menuItem1.Text = item.ToString
                ToolStripMenuItem1.DropDownItems.Add(menuItem1)
            Next
    
            '//Click Event Handler für jeden Favorite Link ToolStripMenuItem
            For Each C As ToolStripItem In ToolStripMenuItem1.DropDownItems
                If TypeOf (C) Is ToolStripMenuItem Then
                    AddHandler C.Click, AddressOf ToolStripMenuItem1_Click
                End If
            Next
    
        End Sub
    
        Private Sub ToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem2.Click
            Dim menuItem1 As New ToolStripMenuItem
            menuItem1.Text = WebBrowser1.Url.ToString
            ToolStripMenuItem1.DropDownItems.Add(menuItem1)
            My.Settings.favList.Add(WebBrowser1.Url.ToString)
        End Sub
    
        Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
            My.Settings.Save()
        End Sub
    
        Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
            WebBrowser1.Navigate(sender.ToString)
        End Sub
    End Class
    

    2)    Hier ist die Hauptidee, Tabbed Eigenschaft Ihrem eigenen Webbrowser hinzuzufügen:

    Fügen Sie dem Webbowser ein neues TabPage Objekt hinzu, fügen Sie dann das TabPage Objekt dem TabControl Objekt hinzu. 

    z.B., wie öffnet man eine neue Seite in einem neuen Tab Fenster ?

            Dim wb As New WebBrowser
            wb.Navigate("URL")
            Dim tab As New TabPage("Title")
            tab.Controls.Add(wb)
            TabControl.TabPages.Add(tab)
            TabControl.SelectedTab = tab
    

    Hier gibt es eine Anleitung über Tabbed Webbrowser:

    http://www.codeproject.com/KB/vb/TabPages.aspx

    [Nach oben]

    Freitag, 19. Februar 2010 15:15
    Moderator

  • Wie kann man eine WinForm-Anwendung, einschließlich einer Datenbankdatei über ClickOnce installieren ?

    1) Eine neue Windows Formanwendung erstellen.

    2) Datenquelle (eine Datenbankdatei wie z.B. SqlDatabase.mdf wählen) zu Ihrem Projekt hinzufügen.

    3) Drag & Drop DataGridView1 auf Form1 und Pfad |DataDirectory| in der Datenbankanschlusszeichenkette verwenden.

    Imports System.Data.SqlClient
    Public Class Form1
        'Binding database table to DataGridView
        Private Sub Form1_Load(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles MyBase.Load
            Dim con As SqlConnection = New SqlConnection( _
               "Data Source=.;Integrated Security=True;AttachDbFilename=|DataDirectory|\SqlDatabase.mdf")
            Dim cmd As SqlCommand = _
               New SqlCommand("SELECT * FROM Table1", con)
            con.Open()
            Dim myDA As SqlDataAdapter = New SqlDataAdapter(cmd)
            Dim myDataSet As DataSet = New DataSet()
            myDA.Fill(myDataSet, "MyTable")
            DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
            con.Close()
            con = Nothing
        End Sub
    End Class
    

    4) SqlDatabase.mdf Datei in Solution Explorer auswählen und die Eigenschaften betrachten:

    Sicherstellen, dass die „Build Action“ Eigenschaft als „Content“ eingestellt wird.

    Die „Copy to Output Directory“ Eigenschaft wird als „Copy if newer“ eingestellt.

    5) Project Property → Publish tab → „Application Files“ Knopf drücken

    Die Datenbankdatei in der Liste überprüfen und sicherstellen, dass ihre „Publish Status“ als „Data File (Auto)“ eingestellt wird und „Download Group“ als „(Required)“ eingestellt wird.

    6) Project Property → Publish tab → „Publish“ Knopf drücken, um Ihre Anwendung zu veröffentlichen.

    Die Datenbankdatei wird zusammen mit der Anwendung in „Data“ Unterordner des Anwendung Installation Ordners entfaltet.

    Zusammen mit der Anwendung wird auch eine exe.config Datei in den Anwendung Installation Ordner entfaltet.

    [Nach oben]

    Freitag, 19. Februar 2010 15:25
    Moderator

  • Wo ist die Speicherstelle der ClickOnce Installation und welche sind die Beschränkungen der ClickOnce-Bereitstellung ?

    ClickOnce-Bereitstellung installiert eine Anwendung in den Benutzer Anwendung Cachespeicher pro Benutzer (nicht in X:\Program Files\Ordner) und wird durch den ClickOnce Service verwaltet. Es ist nicht möglich in einem anderen Ordner direkt  zu installieren durch ClickOnce Verwendung. Das bedeutet Sie können die ClickOnce Installation Speicherstelle nicht ändern.

    ClickOnce-Bereitstellung ist ausgezeichnet, aber es ist nicht für jedes Projekt geeignet. Hier sind einige der Beschränkungen.

    1) ClickOnce Anwendungen werden für gerade einen einzigen Benutzer installiert. Wenn mehrere Leute sich auf den gleichen Computer mit unterschiedlichen Logins anmelden, Sie müssen für jeden Benutzer eine Installation durchführen. Sie können nicht eine Anwendung für jeden Benutzer auf eine Workstation anbringen.

    2) Sie können nicht den Weg ändern, wie die Verknüpfung mit ClickOnce installiert wird. Sie können dieses mit anderen Methoden tun, wie z.B. eine Verknüpfung manuell im korrekten Ordner schaffen.

    3) Sie können ClickOnce nicht verwenden, um geteilte Komponenten in das GAC (Global Assembly Cache) zu installieren. Eigentlich Sie können nicht Aktionen wie z.B. Datenbank erstellen, Datei Arten registrieren oder Registereinstellungen konfigurieren einsetzen.

    ClickOnce-Bereitstellung erstellt eine Programm-Gruppe Menüverknüpfung: „Publisher name“ → „Product name“ unter Startmenü → All Programms.

    Sie können „Publisher name“ und „Product name“ ändern, wie Sie wünschen z.B.:

    Project Properties → Publish tab → „Options…“ Knopf

    Sie können Setup Project-Bereitstellung, die auf dem Windows Installer basiert, verwenden, um flexiblere als ClickOnce-Bereitstellung, stabile Konfigurationen und Automatisierung Anforderungen zuzulassen.

    Einige Tutorielle können hier gefunden werden:

    ClickOnce und Windows Installer-Vergleich Tabelle http://msdn.microsoft.com/de-de/library/142dbbz4.aspx

    Auswahl einer Bereitstellungsstrategie http://msdn.microsoft.com/de-de/library/e2444w33.aspx

    Bestimmung, wann man Windows Installer gegen XCOPY benutzt http://msdn.microsoft.com/en-us/library/aa302347.aspx

    [Nach oben]

    Freitag, 19. Februar 2010 15:30
    Moderator

  • Wie kann man Anwendungsverknüpfungen aus dem Startordner oder Desktop entfernen oder hinzufügen ?

    Im Allgemeinen ClickOnce-Bereitstellung erstellt keine Anwendungsverknüpfungen, wie Sie erwarten würden.

    Jedoch wenn Ihr Projekt auf .Net Framework 3.5 zielt und .Net Framework 3.5 SP1 installiert ist, können Sie eine Desktop Verknüpfung für Ihre Anwendung über ClickOnce-Bereitstellung erstellen.

    Gehen Sie zu Project menu → Properties … → Publish tab → Options… Knopf → Manifests entry → Wählen Sie die „Create desktop shortcut“ Option

    Wenn Ihr Projekt auf andere .Net Framework Versionen zielt, die früher als 3.5 sind, oder Sie möchten eine Verknüpfung an jeder möglicher Stelle erstellen, können Sie die Windows Scripting Host (WSH) Laufzeitbibliothek (IWshRuntimeLibrary) benutzen um eine Verknüpfung programmatisch zu erstellen, wie Sie erwarten würden.

    Erstens, Add Reference → COM Registerkarte → wählen Sie „Windows Script Host Object Model“ und fügen Sie es Ihrem Projekt hinzu 

    Beispiel: Anwendungsverknüpfung auf dem Startordner erstellen

    Vorbedingungen: Drag & Drop Button1 und Button2 auf Form1.

    Imports IWshRuntimeLibrary
    Public Class Form1
    
        Dim StartupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
        Dim shortcutFilePath As String = StartupFolder & "\MeinShortcut.lnk"
    
        ' Add/create the shortcut to the Startup folder
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim WshShell As WshShellClass = New WshShellClass
            Dim MyShortcut As IWshRuntimeLibrary.IWshShortcut
            ' The shortcut will be created in the Startup folder
            MyShortcut = CType(WshShell.CreateShortcut(shortcutFilePath), IWshRuntimeLibrary.IWshShortcut)
            'Specify target file full path
            MyShortcut.TargetPath = Application.StartupPath & "\AnwendungsName.exe"
            ' e.g.  MyShortcut.TargetPath = "C:\WINDOWS\system32\calc.exe"
            MyShortcut.Save()
        End Sub
    
        'Remove the shortcut from the Startup folder
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If IO.File.Exists(shortcutFilePath) Then
                IO.File.Delete(shortcutFilePath)
            End If
        End Sub
    End Class
    

    Sie können auch die Verknüpfung auf dem Desktop oder Start Menü erstellen.

    Dim DesktopFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
    Dim StartMenuFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)
    

    [Nach oben]

    Freitag, 19. Februar 2010 15:37
    Moderator

  • Wie erstellt man eine Login-Überprüfungsroutine (Login-Form) und wie macht man das Kennwort abhängig von Groß-/Kleinschreibung ?

    Hier sind die Schritte:

    1) z.B. MS Datenbankdatei myDB.mdb enthält eine Anwendertabelle mit den Folgenden zwei Feldern:

    Feldname        Daten-Art

    Username       Text

    Password        Text

    2) Eine neue Windows Formanwendung erstellen, danach fügen Sie eine „Login Form“ Vorlage hinzu:

    Project Menu → Windows Form addieren → „Login Form“ Vorlage wählen

    3) Beispiel Code

    Vorbedingungen: txtUsername TextBox, txtPassword TextBox, OK Knopf und Cancel Knopf auf Login Form. 

    Imports System.Data.OleDb
    Public Class LoginForm1
        ' OK button   
        Private Sub OK_Click(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles OK.Click
            Dim con As New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
            Dim cmd As OleDbCommand = New OleDbCommand( _
                       "SELECT * FROM Users WHERE Username = '" & _
                       txtUsername.Text & "' AND [Password] = '" & txtPassword.Text & "' ", con)
            con.Open()
            Dim sdr As OleDbDataReader = cmd.ExecuteReader()
        
            If (sdr.Read() = True) Then
                MessageBox.Show("Der Benutzer ist gültig!")
                Dim mainForm As New MainForm
                mainForm.Show()
                Me.Hide()
            Else
                MessageBox.Show("Ungültiger Benutzername oder Kennwort!")
            End If
        End Sub
        ' Cancel button   
        Private Sub Cancel_Click(ByVal sender As System.Object, _
                        ByVal e As System.EventArgs) Handles Cancel.Click
            Me.Close()
        End Sub
    End Class
    

    Anmerkung: Das Kennwort in der TextBox ist nicht abhängig von Gross-/Kleinschreibung in dem oberen Beispiel Code.

    Um das Kennwort abhängig von Gross-/Kleinschreibung zu machen, versuchen Sie diesen Workaround:

    Erstens, das Kennwort aus der Datenbank nehmen und in DataReader Objekt setzen. Danach, außerhalb der T-SQL Anweisung, das Kennwort mit txtPassword.Text vergleichen.

    Imports System.Data.OleDb
    Public Class LoginForm1
        Private Sub OK_Click(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles OK.Click
            Dim con As OleDbConnection = New OleDbConnection( _
                       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\myDB.mdb;")
            Dim cmd As OleDbCommand = New OleDbCommand( _
                       "SELECT * FROM Users WHERE Username='" & _
                       txtUsername.Text & "' and [Password]='" & txtPassword.Text & "'", con)
            con.Open()
            Dim sdr As OleDbDataReader = cmd.ExecuteReader()
            
            If sdr("Password") <> txtPassword.Text.ToString() Then
                MessageBox.Show("Ungültiges Kennwort!")
            End If
            sdr.Close()
            con.Close()
        End Sub
    End Class
    

    [Nach oben]

    Freitag, 19. Februar 2010 15:46
    Moderator

  • Wie speichert man BLOB-Daten (z.B. Bilder, Dokumente) in einer SQL Server Datenbank ?

    Folgender Link beschreibt, wie man Objekte als BLOBs (Binary Large Objects) in SQL Server 2000 und 2005 speichern und aufrufen kann mithilfe von ASP.NET 2.0:

    http://www.codeproject.com/KB/database/Store_and_manipulat_BLOBs.aspx

    1)    Die intuitive Methode ist, BLOB-Daten (z.B. Bild, Dokument) in die Datenbank im Byte Array Format zu speichern.

    Bevor man die Datei in die Datenbank einfügt, muss man sie in Byte Array Format konvertieren.

    Umgekehrt, der Byte Array Stream aus der Datenbank aufrufen und in die Datei wieder konvertieren.

    T-SQL Daten-Art

    Mitgliedsname

    Beschreibung

    Binär

    Byte Array. Eine konstante Stream-Länge aus binären Daten, die sich zwischen 1 und 8.000 Bytes erstreckt.

    Bild

    Byte Array. Eine variable Stream-Länge aus binären Daten, die sich von 0 bis 2<sup>31</sup> - 1 (oder 2.147.483.647) erstreckt.

    Beispiel Code:

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/0fb5fd05-3eb5-4568-9e2a-fd9ba5ed5a3e

    2) Jedoch binäre Objekte (z.B. Bild, Bürodokument etc.) in die Datenbank zu speichern ist etwas lästig, wenn es zur Wiederherstellung kommt. Der am häufigsten geltende Weg ist nur der Dateipfad in der Datenbank zu speichern, und die Dokumente auf einem File Share zu speichern. 

    [Nach oben]

    Freitag, 19. Februar 2010 15:52
    Moderator

  • Wie erstellt man eine Anwendung, die Datenzugang verwendet ?

    Hier sind vier Methoden die als Beispiel Microsoft Access Datenbankdatei verwenden:

    1) Mithilfe von DataGridView Steuerelement:

    Select-Abfrage um Daten von einer Microsoft Access Datenbank aufrufen.

    Insert-Abfragen um Daten einzufügen.

    Update/Delete-Abfragen um Daten zu aktualisieren.

    Beispiel Code: 

    Imports System.Data.OleDb
    Public Class Form1
        Dim myDA As OleDbDataAdapter
        Dim myDataSet As DataSet
        Private Sub Form1_Load(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles MyBase.Load
            Dim con As OleDbConnection = New OleDbConnection( _
                          "Provider=Microsoft.jet.oledb.4.0;data source=|DataDirectory|\myDB.mdb")
            Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Table1", con)
            con.Open()
            myDA = New OleDbDataAdapter(cmd)
            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(myDA)
            myDataSet = New DataSet()
            myDA.Fill(myDataSet, "MyTable")
            DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
            con.Close()
            con = Nothing
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button1.Click
            Me.Validate()
            Me.myDA.Update(Me.myDataSet.Tables("MyTable"))
            Me.myDataSet.AcceptChanges()
        End Sub
    End Class
    

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/5980181e-f666-4f0a-ab50-c4ebecf96f02/

    2) Select/Update/Delete/Update T-SQL Befehle im Code ausführen

    Beispiel Code für Microsoft Access Datenbanken http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/87913f28-992d-4705-963b-cb0ffa53d8dd/

    Beispiel Code für SQL Server Datenbanken http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/89e1067d-16e7-44e8-b12d-d78845bf255f/

    3) Verwenden Sie den Data Wizard mit einem BindingNavigator Steuerelement.

    Überprüfen Sie bitte den 11. Beitrag in diesem Diskussionsfaden für eine ausführliche Beschreibung:

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/ff3f953b-da66-4f03-b4e4-981bab7d783b/

    4) DataSet/DataTable im Code laufen lassen

    Überprüfen Sie bitte die 12. und 13. Beiträge in diesem Diskussionsfaden für einen ausführlichen Beispiel Code:

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/ff3f953b-da66-4f03-b4e4-981bab7d783b/

    [Nach oben]

    Freitag, 19. Februar 2010 16:03
    Moderator
  • Wie sucht und filtert man Datensätze in einer Datenbank ?

    Zwei Methoden zum Suchen und Filtern der Datensätze von einer Datenbank sind unten beschrieben:

    1) T-SQL Select Befehl verwenden, um Datensätze zu filtern

    Vorbedingungen: DataGridView1 und TextBox1 auf Form1.

     

    Imports System.Data.OleDb
    Public Class Form1
        '//TextBox_TextChanged Ereignis 
        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
                             ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            Dim keywords As String = TextBox1.Text
            Dim con As OleDbConnection = New OleDbConnection( _
                             "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
            '//Verwenden von Platzhalter
            Dim cmd As OleDbCommand = New OleDbCommand( _
                             "SELECT * FROM Table1 WHERE Filed1 Like '%" & keywords & "%' ", con)
            '//oder Where Filed1='" & keywords & "'   
            con.Open()
            Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
            Dim myDataSet As DataSet = New DataSet()
            myDA.Fill(myDataSet, "MyTable")
            DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
        End Sub
    End Class
    

    2) DataView.RowFilter Eigenschaft verwenden, um Datensätze zu filtern

    Vorbedingungen: DataGridView1 und TextBox1 auf Form1.

     

    System.Data.OleDb
    Public Class Form1
        Dim ds As DataSet
        '//Erstens alle Datensätze an DataGridView binden
        Private Sub Form1_Load(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles MyBase.Load
            Dim con As OleDbConnection = New OleDbConnection( _
                          "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
            Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Table1", con)
            con.Open()
            Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
            ds = New DataSet()
            myDA.Fill(ds, "MyTable")
            con.Close()
            DataGridView1.DataSource = ds.Tables("MyTable").DefaultView
        End Sub
        '//Datentabelle Ansicht filtern
        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
                             ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            Dim keywords As String = TextBox1.Text
            ds.Tables("MyTable").DefaultView.RowFilter = "Field1 =" & keywords
            '//oder  = "Field1 Like '%" & keywords & "%' "   
        End Sub
    End Class
    

    [Nach oben]

    Montag, 22. Februar 2010 11:05
    Moderator
  • Nach dem Neustart einer Anwendung, infolge von Änderungen, warum scheint die Datenbank sich nicht zu aktualisieren ?

    Üblicherweise fügt jemand eine Datenbankdatei (z.B. .mdb, .mdf, .sdf) als Datenquelle einem Projekt hinzu und erstellt eine Datenzugang Anwendung.

    Wenn eine Anwendung neugestartet wird nach dem Einfügen oder der Aktualisierung von Daten, scheint die Datenbank sich nicht zu aktualisieren.

    Ursache:

    Wenn Sie Datenquelle addieren, behält Visual Studio .NET zwei Kopien der Datenbank, eine im Projektordner und die andere im bin Ordner bei. Jedes Mal wenn die Anwendung neugestartet wird, die Kopie vom Projektordner werd im bin Ordner kopiert. Folglich erhalten Sie eine saubere Kopie. 

    Lösung:

    Rechtsklick auf der Datenbankdatei in Solution Explorer → Select Properties →  Einstellen des “Copy to output directory“ Eigenschaft Werts als “copy if newer“.

    [Nach oben]

    Montag, 22. Februar 2010 11:08
    Moderator
  • Wie bildet man mit Hilfe von VB.NET eine parametrisierte Abfrage in der Datenbank ?

    Beispiel Code: Parametrisierte Abfrage in der SQL Server Datenbank

    Diskussionsfaden: http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/bcf9011f-43e5-454b-8c03-4f2a6be250ac/

     

    Imports System.Data.SqlClient
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button1.Click
            Dim con As SqlConnection = New SqlConnection( _
                            "Data Source=.;Integrated Security=True;AttachDbFilename=D:\myDB.mdf")
            con.Open()
            Dim cmdText As String = _
                            "INSERT INTO Customer(UserName, [Password]) VALUES (@UserName,@Password)"
            Dim cmd As SqlCommand = New SqlCommand(cmdText, con)
            With cmd.Parameters
                .Add(New SqlParameter("@UserName", txtUserName.Text))
                .Add(New SqlParameter("@Password", txtPassword.Text))
            End With
            cmd.ExecuteNonQuery()
            con.Close()
            con = Nothing
        End Sub
    End Class
    

    Beispiel Code: Parametrisierte Abfrage in der Microsoft Access Datenbank

    Diskussionsfaden:http://social.msdn.microsoft.com/forums/en/vbgeneral/thread/6ba7ec3d-fe34-44c7-8cdf-28984080fa17/

     

    Imports System.Data.OleDb
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button1.Click
            Dim con As OleDbConnection = New OleDbConnection( _
                            "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
            con.Open()
            Dim cmdText As String = "INSERT INTO Customer(UserName, [Password]) VALUES (?,?)"
            Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
            cmd.CommandType = CommandType.Text ‘ The default is CommandType.Text
            With cmd.Parameters
                .Add("@p1", OleDbType.VarChar).Value = txtUserName.Text
                .Add("@p2", OleDbType.VarChar).Value = txtPassword.Text
            End With
            cmd.ExecuteNonQuery()
            con.Close()
            con = Nothing
        End Sub
    End Class
    

    Hinweis:

    http://msdn.microsoft.com/de-de/library/system.data.oledb.oledbcommand.parameters.aspx 

    Der OLE DB-.NET-Anbieter unterstützt keine benannten Parameter für die Übergabe von Parametern an eine SQL-Anweisung oder gespeicherte Prozedur, die von OleDbCommand aufgerufen wird, wenn CommandType auf Text festgelegt ist. In diesem Fall muss das Fragezeichen (?) als Platzhalter verwendet werden. Beispiel:

    SELECT * FROM Customers WHERE CustomerID = ?

    Die Reihenfolge, in der OleDbParameter-Objekte der OleDbParameterCollection hinzugefügt werden, muss daher direkt der Position des Fragezeichenplatzhalters für den Parameter im Befehlstext entsprechen.

    KB: Aufrufen einer parametrisierten gespeicherten Prozedur mit ADO.NET und Visual C# .NET

    http://support.microsoft.com/kb/310070/de

    [Nach oben]

    Montag, 22. Februar 2010 11:14
    Moderator