Fragensteller
FAQ - Häufig gestellte Fragen zu Visual Basic .NET General

Allgemeine Diskussion
-
FAQ - Häufig gestellte Fragen zu Visual Basic .NET GeneralStand: 04.02.2010
Einige Lösungen zu häufig gestellten Fragen auf Basis von Visual Basic.NET General können jetzt auf dieser Seite gefunden werden. Obgleich er nicht komplett ist, versucht dieser Artikel des Forum Support Teams, Community-Mitgliedern zu helfen die Antworten auf allgemeine Fragen zu Visual Basic.NET einfacher und schneller zu finden. Ziel des Forum Support Teams ist, das MSDN Forum kontinuierlich zu verbessern und einen aktiven Beitrag zu den Diskussionen zu leisten; daher wird dieser Thread mit der Zeit mit mehr Fragen und Antworten ergänzt - ich freue mich über jedes Feedback oder Vorschläge.
Im Namen des Forum Support Teams bedanke ich mich bei allen Visual Basic .NET Forumsmitgliedern die aktiv an diesem Forum teilnehmen und anderen helfen !Allgemein
- 1. Wie wird die Assembly von der CLR (Common Language Runtime) geladen ?
- 2. Was für ein Unterschied gibt es zwischen ByVal und ByRef ?
- 3. Wie erbt man ein vorhandenes Steuerelement (Benutzersteuerelement) und wie wird es der Werkzeugkiste (ToolBox) hinzugefügt ?
- 4. Wie kann man ein .NET Bestandteil erstellen und als DLL verteilen ?
- 5. Wie kann man die Leistung einer Windows Formanwendung verbessern ?
- 6. Wie lokalisiert man die Windows Anwendung ?
- 7. Welche Tipps gibt es, um eine ordnungsmäßige Implementierung von Multithreading in der VB.NET-Anwendung durchzuführen ?
- 8. Wie leitet man den Standard Eingang/Ausgang-eines Prozesses um ?
- 9. Wie führt man Serial-COM Portkommunikation ein ?
- 10.Wie kann man eine Dateiextension mit der Anwendung verbinden ?
- 11.Wie spielt man eine Flash Datei (.swf) in der WinForm ab ?
- 12.Wie spielt man Audio-/Videodateien in VB.NET ab ?
- 13.Wie speichert man eine Webseite in VB.NET ?
- 14.Wie öffnet/sieht man Office Dokumente (Word, Excel, PowerPoint), in einer VB.NET Form ?
- 15.Wie ruft man Hardwareinformationen über WMI ab ?
- 16.Wie wird ein Bild auf das PictureBox-Steuerelement bzw. auf das Image-Objekt gezeichnet ?
- 17.Wie konvertiert man zwischen einem Image-Objekt und dem Byte-Array ?
- 18.Wie ändert man bei gleichem Maßstab die Größe eines Bildes ?
P/Invoke
- 19.Was bedeutet Platform Invoke Service (P/Invoke) ?
- 20.Wie registriert man einen Hotkey in VB.NET ?
- 21.Setup der Mouse-Hook und Tastatur-Hook ?
COM Interop
- 22.Was ist COM Interop ?
- 23.Wie adressiert man eine VB6-Dll in einer VB.NET Anwendung ?
- 24.Wie verwendet man Word-Automatisierung in VB.NET ?
- 25.Wie verwendet man Excel-Automatisierung in VB.NET ?
Web Browser
- 26.Wie automatisiert man eine Webseite (z.B. Seitentext abrufen, Login Webseite, Suchen, Klickknopf oder Hypertext-Link) durch den Webbrowser ?
- 27.Wie erstellt man einen eigenen Webbrowser ?
- 28.Wie fügt man dem eigenen Webbrowser die Favoriten/Lesezeichen und Tabbed-Funktionen hinzu ?
ClickOnce und Setup Deployment
- 29.Wie kann man eine WinForm-Anwendung, einschließlich einer Datenbankdatei über ClickOnce veröffentlichen/ausrollen ?
- 30.Wo ist die Speicherstelle der ClickOnce Installation und was sind die Beschränkungen der ClickOnce Entwicklung ?
- 31.Wie kann man Anwendungsverknüpfungen aus dem Startordner oder Desktop entfernen oder hinzufügen ?
ADO.NET
- 32.Wie erstellt man eine Login-Überprüfungsroutine (Login-Form) und wie macht man das Kennwort abhängig von Groß-/Kleinschreibung ?
- 33.Wie speichert man BLOB-Daten (z.B. Bilder, Dokumente) in einer Datenbank ?
- 34.Wie erstellt man eine Anwendung, die Datenzugang verwendet ?
- 35.Wie sucht und filtert man Datensätze in einer Datenbank ?
- 36.Nach dem Neustart einer Anwendung, infolge von Änderungen, warum scheint die Datenbank sich nicht zu aktualisieren ?
- 37.Wie bildet man mit Hilfe von VB.NET eine parametrisierte Abfrage in der Datenbank ?
- Bearbeitet Robert BreitenhoferModerator Freitag, 19. Februar 2010 13:46 Beiträge hinzugefügt
Donnerstag, 4. Februar 2010 16:01Moderator
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 SondierungLesen 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
Donnerstag, 4. Februar 2010 16:13Moderator -
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:29Moderator -
Hier sind die Schritte:
Wie erbt man ein vorhandenes Steuerelement (Benutzersteuerelement) und wie wird es der Werkzeugkiste (ToolBox) hinzugefügt ?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
Freitag, 5. Februar 2010 07:06Moderator -
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
Freitag, 5. Februar 2010 07:10Moderator -
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 RessourcenmanagementAllgemein 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.
Freitag, 5. Februar 2010 07:13Moderator -
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
Freitag, 5. Februar 2010 07:14Moderator -
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
Freitag, 5. Februar 2010 07:17Moderator -
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:21Moderator -
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.aspxDas 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:25Moderator -
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:27Moderator -
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
Freitag, 5. Februar 2010 07:32Moderator -
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.
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()
Freitag, 5. Februar 2010 07:40Moderator -
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
Freitag, 5. Februar 2010 07:45Moderator -
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
Freitag, 5. Februar 2010 07:47Moderator -
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:
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.
Freitag, 5. Februar 2010 07:51Moderator -
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
Freitag, 5. Februar 2010 07:59Moderator -
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
Freitag, 5. Februar 2010 08:03Moderator -
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
Freitag, 5. Februar 2010 08:07Moderator -
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.
Freitag, 19. Februar 2010 14:13Moderator -
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
Freitag, 19. Februar 2010 14:21Moderator -
Setup der Maus-Hook und Tastatur-HookUm 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
Freitag, 19. Februar 2010 14:25Moderator -
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]- Bearbeitet Robert BreitenhoferModerator Donnerstag, 25. Februar 2010 14:37 "Einführung in COM-Interop" addiert
Freitag, 19. Februar 2010 14:30Moderator -
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()
Freitag, 19. Februar 2010 14:38Moderator -
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/deFreitag, 19. Februar 2010 14:43Moderator -
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
Freitag, 19. Februar 2010 14:49Moderator -
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
Freitag, 19. Februar 2010 14:55Moderator -
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
Freitag, 19. Februar 2010 15:02Moderator -
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:
Freitag, 19. Februar 2010 15:15Moderator -
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.
Freitag, 19. Februar 2010 15:25Moderator -
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
Freitag, 19. Februar 2010 15:30Moderator -
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)
Freitag, 19. Februar 2010 15:37Moderator -
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
Freitag, 19. Februar 2010 15:46Moderator -
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.
Freitag, 19. Februar 2010 15:52Moderator -
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
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:
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:
Freitag, 19. Februar 2010 16:03Moderator -
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
Montag, 22. Februar 2010 11:05Moderator -
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“.
Montag, 22. Februar 2010 11:08Moderator -
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
Montag, 22. Februar 2010 11:14Moderator