Benutzer mit den meisten Antworten
Viele Fragen: Netzwerk, GetSystemInfos, Speicherung in Datei

Frage
-
Hallo Gemeinde :)
Lang ist es her, dass ich mit Visual Studio gearbeitet habe. Habe mir früher Visual Basic 6.0 gekauft.
Heute habe ich mir die Testversion von Visual Studio 2008 heruntergeladen und installiert. :)
Meine Herren, hat sich ja so Einiges geändert ....
Ob ich diese Version kaufen werde? Glaube nicht. Da ich hier im Forum gelesen habe, dass Visual Studio 2010 im kommenden März zu haben sein soll.
Aber nun zu meinem Projekt.
Habe ein Formular erstellt, dass viele Felder (MaskedTextBox) hat, drei von denen soll das Programm ermitteln und der Rest über manuelle Eingabe.
Diese Daten, die eingegeben und ermittelt wurden, sollen in einer Datei abgespeichert werden.
1. Im Formular wurde ein "MenuStrip" eingebunden. Über einen Menüpunkt wird eine neue Form geladen.
Um das zu testen, habe ich die .EXE Datei jemanden geschickt, der Windows 7 (64bit) hat. Er konnte das Formular öffnen, aber wenn
dieser den Menüpunkt anwählt, kommt folgende Fehlermeldung: "Unbehandelte Ausnahme in der Anwendung".
Was heißt das? Im Internet kann ich da keine brauchbaren Informationen finden. Ich selbst habe Windows XP 32 bit.
Bei mir funktioniert alles bisher.
2. Zu den Feldern, die Daten ermitteln soll: Betriebssystem, Netzwerkkarte, Netzwerkkarten-Treiberversion.
Betriebssystem habe ich schon einige Informationen finden können. Nur in Sachen Netzwerk konnte ich nur folgendes im Internet finden:
MAC-Adresse, IP ermitteln, Netzwerk vorhanden, usw..
Wie kann ich die aktuelle gebrauchte/genutzte Netzwerkkarte (Hersteller) und die installierte Treiberversion ermitteln?
3. Betriebssystem: Habe eine Seite gefunden, die dieses beschreibt und den Code zur Verfügung stellt. Gibt es da was einfaches?
http://forum.vb-paradise.de/allgemeines/sourcecode-austausch/22666-betriebssystem-ermitteln-inkl-architektur/
Auf der folgenden Seite werden alle Betriebssystem mit Build-Nummern aufgelistet. Windows7 ist da nicht komplett - kann die jemand
vervollständigen? http://www.winfaq.de/faq_html/Content/tip0500/onlinefaq.php?h=tip0637.htm
4. Wenn ich die .EXE Datei starte, öffnet die m.E. nach irgendwo. Kann man das nicht mittig setzen? Und die Form über MenuStrip ebenfalls?
Wie mache ich das?
5. Speichern der Daten in einer Datei. Wie mache ich das?
Habe eine Seite gefunden, die das beschreibt, aber so schlau werde ich da nicht daraus. Hat jemand eine bessere Idee?
Meine Idee wäre außerdem auch, dass der Dateiname ein Teile von den Feldern beinhalten soll (zum Beispiel:
kundennummer_datum.txt).
Speicherort: C:\. :) Mit der Meldung, dass die Datei da mit Dateinamen erstellt wurde.
Wäre für Eure Hilfe sehr dankbar :).
Grüße
- Bearbeitet Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:48 Hyperlink als Hyperlink
- Bearbeitet McCimberly Montag, 21. Dezember 2009 13:17
Antworten
-
.Hallo MaikJ,
entschuldige erst mal, dass ich bisher nicht geantwortet habe (Erkältung). Für die von Dir gewünschten Informationen heißt das Zauberwort Windows Management Instrumentation (WMI). Diese kannst Du in. NET mit Hilfe des Namespace System.Management an programmieren. Leider bietet aber auch WMI keine Möglichkeit einen Netzwerktreiber zu erkennen. (Mir ist in .NET auch keine andere Möglichkeit bekannt)
Eine Einführung in WMI findest Du hier:
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Zum Thema WMI und .NET:
http://msdn.microsoft.com/en-us/library/aa720264(VS.71).aspx
Bevor Du jetzt loslegst hier ein schneller Überblick über die Vorgehensweise:
1.Öffne Dein Projekt im Visual Studio
2.Öffne den Server-Explorer des Visual StudiosIm Baum findest Du unter Server einen Knoten namens Verwaltungsklassen. Wenn Du in den Verwaltungsklassen den gewünschten Eintrag (z.B. Betriebssystem) findest kannst Du den folgenden Arbeitsschritt überspringen.
3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken4.Verwaltungsklasse markieren - Kontextmenü Verwaltete Klasse generieren
Das Visual Studio fügt nun ausreichend Code in Dein Projekt ein, um alle Eigenschaften der Verwaltungsklasse auszuwerten.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:41
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
ich habe Dein kleines Codebeispiel mal umgeschrieben (damit Du es gleich testen kannst, habe ich es in Form_Load eingebunden)Imports System.IO Imports System.Management Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Dim searcher As New ManagementObjectSearcher( _ "root\CIMV2", _ "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface") TextBox2.AppendText("-----------------------------------" & Environment.NewLine) TextBox2.AppendText("Win32_PerfFormattedData_Tcpip_NetworkInterface Instance" & Environment.NewLine) TextBox2.AppendText("-----------------------------------" & Environment.NewLine) Dim s1 As String = "" For Each queryObj As ManagementObject In searcher.Get() s1 = queryObj("Name").ToString TextBox2.AppendText(s1 & Environment.NewLine) Next Catch err As ManagementException MessageBox.Show("An error occurred while querying for WMI data: " & err.Message) End Try End Sub End Class
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 8. Dezember 2009 14:25
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
bei MaskedTextBoxen prüft man auf MaskCompleted = true. Dies stellt sicher das eine Eingabe vorhanden ist (Achtung - Ersetzt aber nicht die Validierung der Eingabe).
Dein Problem mit der Multiline kann nicht nachvollziehen, da ich den Zustand nicht reproduzieren kann.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Oliver Michalski Dienstag, 22. Dezember 2009 12:57
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 22. Dezember 2009 14:11
-
Hallo MaikJ,
zu mindestens für die Fehlermeldung kann ich Dir sofort eine Erklärung liefern. Wenn Du die Visual Basic PowerPacks brauchst musst Du ein Setupprogramm erstellen und die entsprechenden Assemblies mit ausliefern, da sie nicht zum Standardumfang des Frameworks gehören.
Nur die Exe führt auf jeden Rechner ohne installierten Visual Studio zum gleichen Fehler.
Schöne Grüße
Oliver
Servus Oliver.
Ah, ok - Danke. Habe schon versucht mit einem neuen Projekt ein Setupprogramm zu erstellen, aber irgendwie komme ich nicht damit klar. Keine Ahnung was ich da alles anklicken muss.
Die .EXE Datei wird in bin\x86\Release\ erstellt.
Oliver, könntest Du mir alles verraten, was ich anklicken muss?
Was habe ich bisher angeklickt?
Neues Projekt erstellen -> Andere Projekttypen -> Setup und Bereitstellung (oben rechts .NET Frameworks 3.5) -> OK
Grüße
MaikJ
Zu Punkt 1)
So, bin jetzt ein wenig schlauer geworden.
Man kann im eigentlichen Projekt eine Application erstellen.
Man öffnet das Projekt:
Auf der linken Seite auf "Veröffentlichen".
Habe dort auf "Anwendungsdateien..." geklickt. Eingebunden "de\Microsoft.VisualBasic.PowerPacks.Vs.resources.dll " und "Microsoft.VisualBasic.PowerPacks.Vs.dll ".
Unter "Erforderlichen Komponenten..." angeklickt: Windows Installer 3.1 , .NET Frameworks 3.5 SP1 und Microsoft Visual Basic PowerPacks 1.2 .
Klicke ich nun auf "Jetzt veröffentlichen" wird auf dem Desktop folgendes erstellt: Ordner: Application Files, setup.exe und Projektname.application
Wenn ich auf Setup.exe klicke, wird das Programm installiert.
Was bedeutet folgendes?
Dateizuordnungen
Um auf die Optionen für Dateizuordnungen zuzugreifen, klicken Sie auf Dateizuordnungen im Dialogfeld Veröffentlichungsoptionen .
- Erweiterung
-
Gibt die Dateinamenerweiterung an, die der Anwendung zugeordnet sein soll.
- Beschreibung
-
Eine Beschreibung des Dateityps.
- Programm-ID
-
Ein Name, der den Dateityp eindeutig identifiziert.
- Symbol
-
Gibt das Symbol an, das für Dateien mit dieser Erweiterung verwendet werden soll.
Zu Punkt 4)
Hat sich erledigt. Eigenschaften des Forms - Startposition auf CenterScreen.
Grüße- Bearbeitet McCimberly Dienstag, 1. Dezember 2009 19:04 Zu Punkt 1) editiert
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:41
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:21
-
Hallo MaikJ,
ich habe Punkt 5 vergessen. Anbei ein kleines CodebeispielImports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim customer As String = "customer1" 'nur ein Beispiel Dim datum As String = "1.12.2009" 'nur ein Beispiel kann auch mit einer DateTime Methode befüllt werden Dim filename As String = customer + "_" + datum Dim path As String = "c:\temp\" + filename + ".txt" Dim infotext As String = "Hier würden die Systeminfos stehen" Dim swr As StreamWriter = File.CreateText(path) swr.WriteLine(infotext) swr.Flush() swr.Close() End Sub End Class
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:42
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
es folgt eine kleine Bildershow
1.Öffne Dein Projekt im Visual Studio
2.Öffne den Server-Explorer des Visual Studios
http://ehtbfg.blu.livefilestore.com/y1pVy8o8os6Em-S0NtMCmGJvASbm0ctKIHcwiPfoMaAjeFqfmig5qhNMkIUH1r4pfx1_WR1OrCm5DuPFqG9abZy24e1nE7tmlYD/SE1.jpg
Im Baum findest Du unter Server einen Knoten namens Verwaltungsklassen. Wenn Du in den Verwaltungsklassen den gewünschten Eintrag (z.B. Betriebssystem) findest kannst Du den folgenden Arbeitsschritt überspringen.
http://ehtbfg.blu.livefilestore.com/y1pKjXhEICTgg_PKoKV6vleJiMRNXlhA8R8HOYeUl48dOVHvIL7YDqec_UZ9RNVguLSagYAYlOwItOVPADddCGlvG-OZnwWj3tL/SE2.jpg
3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken
http://ehtbfg.blu.livefilestore.com/y1pe6exegs4ZnX1eKzVi29xi9cin6TQyHAHFsLjPCgfBHwdqNG0q4rf18j8os91W-kQwlRFDSf0W6k2-qPFcYNd-g16ifT9IjVU/SE5.jpg
http://ehtbfg.blu.livefilestore.com/y1pBBTl73mvlxZA0VhTNxO1bs9RIof_rBC7XSY2zOMjIQl0cndYh6mLXWge4LRVW1-GGOnP27DN4EFejVTX5957nf65xuwCd6bz/SE5b.jpg
4.Verwaltungsklasse markieren - Kontextmenü Verwaltete Klasse generieren
http://ehtbfg.blu.livefilestore.com/y1paZi197M1tAWCHEg2uTnSrpIZCTHSifh1vNaZNULyiyvU1zVHyMM75OAZRNo72jZxK-bQ0je9NiNfpuJIlYbNB-ZKR9TYJzmf/SE3.jpg
Das Visual Studio fügt nun ausreichend Code in Dein Projekt ein, um alle Eigenschaften der Verwaltungsklasse auszuwerten
http://ehtbfg.blu.livefilestore.com/y1pmRVToJOfEWLZ2GtSbo_joQcqlcV7VLiht9m131PMExFPgt5DTe2kcLq_vuNSYo31MUg6o7A53IHeRFLSIQyiOolC2hjkEEoq/SE4.jpg
Ich hoffe das hilft.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Sonntag, 6. Dezember 2009 09:35
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
vielleicht solltest Du nicht prüfen ob ein String leer ist (If TextBox_customer.Text = "") sondern ob er gefüllt ist (If TextBox_customer.Text <> ""). Dann kannst Du deinen Code so aufbauen, dass die Schreibaktion nur dann erreicht wird, wenn alle Felder gefüllt sind.
If (TextBox2.Text <> String.Empty) Then If (TextBox3.Text <> String.Empty) Then Dim swr As StreamWriter = File.CreateText(Path) swr.WriteLine(kd_txt) swr.Flush() swr.Close() Else MessageBox.Show("Feld muss gefüllt sein") End If Else MessageBox.Show("Feld muss gefüllt sein") End If
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Oliver Michalski Dienstag, 22. Dezember 2009 09:22
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 22. Dezember 2009 14:11
Alle Antworten
-
Hallo MaikJ,
zu mindestens für die Fehlermeldung kann ich Dir sofort eine Erklärung liefern. Wenn Du die Visual Basic PowerPacks brauchst musst Du ein Setupprogramm erstellen und die entsprechenden Assemblies mit ausliefern, da sie nicht zum Standardumfang des Frameworks gehören.
Nur die Exe führt auf jeden Rechner ohne installierten Visual Studio zum gleichen Fehler.
Schöne Grüße
Oliver- Bearbeitet Oliver Michalski Dienstag, 1. Dezember 2009 08:32 Typo
-
Hallo MaikJ,
zu mindestens für die Fehlermeldung kann ich Dir sofort eine Erklärung liefern. Wenn Du die Visual Basic PowerPacks brauchst musst Du ein Setupprogramm erstellen und die entsprechenden Assemblies mit ausliefern, da sie nicht zum Standardumfang des Frameworks gehören.
Nur die Exe führt auf jeden Rechner ohne installierten Visual Studio zum gleichen Fehler.
Schöne Grüße
Oliver
Servus Oliver.
Ah, ok - Danke. Habe schon versucht mit einem neuen Projekt ein Setupprogramm zu erstellen, aber irgendwie komme ich nicht damit klar. Keine Ahnung was ich da alles anklicken muss.
Die .EXE Datei wird in bin\x86\Release\ erstellt.
Oliver, könntest Du mir alles verraten, was ich anklicken muss?
Was habe ich bisher angeklickt?
Neues Projekt erstellen -> Andere Projekttypen -> Setup und Bereitstellung (oben rechts .NET Frameworks 3.5) -> OK
Grüße
MaikJ -
Hallo MaikJ,
zu mindestens für die Fehlermeldung kann ich Dir sofort eine Erklärung liefern. Wenn Du die Visual Basic PowerPacks brauchst musst Du ein Setupprogramm erstellen und die entsprechenden Assemblies mit ausliefern, da sie nicht zum Standardumfang des Frameworks gehören.
Nur die Exe führt auf jeden Rechner ohne installierten Visual Studio zum gleichen Fehler.
Schöne Grüße
Oliver
Servus Oliver.
Ah, ok - Danke. Habe schon versucht mit einem neuen Projekt ein Setupprogramm zu erstellen, aber irgendwie komme ich nicht damit klar. Keine Ahnung was ich da alles anklicken muss.
Die .EXE Datei wird in bin\x86\Release\ erstellt.
Oliver, könntest Du mir alles verraten, was ich anklicken muss?
Was habe ich bisher angeklickt?
Neues Projekt erstellen -> Andere Projekttypen -> Setup und Bereitstellung (oben rechts .NET Frameworks 3.5) -> OK
Grüße
MaikJ
Zu Punkt 1)
So, bin jetzt ein wenig schlauer geworden.
Man kann im eigentlichen Projekt eine Application erstellen.
Man öffnet das Projekt:
Auf der linken Seite auf "Veröffentlichen".
Habe dort auf "Anwendungsdateien..." geklickt. Eingebunden "de\Microsoft.VisualBasic.PowerPacks.Vs.resources.dll " und "Microsoft.VisualBasic.PowerPacks.Vs.dll ".
Unter "Erforderlichen Komponenten..." angeklickt: Windows Installer 3.1 , .NET Frameworks 3.5 SP1 und Microsoft Visual Basic PowerPacks 1.2 .
Klicke ich nun auf "Jetzt veröffentlichen" wird auf dem Desktop folgendes erstellt: Ordner: Application Files, setup.exe und Projektname.application
Wenn ich auf Setup.exe klicke, wird das Programm installiert.
Was bedeutet folgendes?
Dateizuordnungen
Um auf die Optionen für Dateizuordnungen zuzugreifen, klicken Sie auf Dateizuordnungen im Dialogfeld Veröffentlichungsoptionen .
- Erweiterung
-
Gibt die Dateinamenerweiterung an, die der Anwendung zugeordnet sein soll.
- Beschreibung
-
Eine Beschreibung des Dateityps.
- Programm-ID
-
Ein Name, der den Dateityp eindeutig identifiziert.
- Symbol
-
Gibt das Symbol an, das für Dateien mit dieser Erweiterung verwendet werden soll.
Zu Punkt 4)
Hat sich erledigt. Eigenschaften des Forms - Startposition auf CenterScreen.
Grüße- Bearbeitet McCimberly Dienstag, 1. Dezember 2009 19:04 Zu Punkt 1) editiert
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:41
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:21
-
.Hallo MaikJ,
entschuldige erst mal, dass ich bisher nicht geantwortet habe (Erkältung). Für die von Dir gewünschten Informationen heißt das Zauberwort Windows Management Instrumentation (WMI). Diese kannst Du in. NET mit Hilfe des Namespace System.Management an programmieren. Leider bietet aber auch WMI keine Möglichkeit einen Netzwerktreiber zu erkennen. (Mir ist in .NET auch keine andere Möglichkeit bekannt)
Eine Einführung in WMI findest Du hier:
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Zum Thema WMI und .NET:
http://msdn.microsoft.com/en-us/library/aa720264(VS.71).aspx
Bevor Du jetzt loslegst hier ein schneller Überblick über die Vorgehensweise:
1.Öffne Dein Projekt im Visual Studio
2.Öffne den Server-Explorer des Visual StudiosIm Baum findest Du unter Server einen Knoten namens Verwaltungsklassen. Wenn Du in den Verwaltungsklassen den gewünschten Eintrag (z.B. Betriebssystem) findest kannst Du den folgenden Arbeitsschritt überspringen.
3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken4.Verwaltungsklasse markieren - Kontextmenü Verwaltete Klasse generieren
Das Visual Studio fügt nun ausreichend Code in Dein Projekt ein, um alle Eigenschaften der Verwaltungsklasse auszuwerten.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:41
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
ich habe Punkt 5 vergessen. Anbei ein kleines CodebeispielImports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim customer As String = "customer1" 'nur ein Beispiel Dim datum As String = "1.12.2009" 'nur ein Beispiel kann auch mit einer DateTime Methode befüllt werden Dim filename As String = customer + "_" + datum Dim path As String = "c:\temp\" + filename + ".txt" Dim infotext As String = "Hier würden die Systeminfos stehen" Dim swr As StreamWriter = File.CreateText(path) swr.WriteLine(infotext) swr.Flush() swr.Close() End Sub End Class
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 3. Dezember 2009 12:42
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Hallo MaikJ,
Zu Punkt 3 à Ermitteln des Betriebssystems
SO WIRD'S GEMACHT: Bestimmen der Version von Windows mit Visual Basic .NET à http://support.microsoft.com/kb/304289/en-us
Vielleicht folgender CodeSchnipsel ist einfacher.
Dim CI As New Microsoft.VisualBasic.Devices.ComputerInfo MessageBox.Show(CI.OSPlatform) MessageBox.Show(CI.OSVersion) MessageBox.Show(CI.OSFullName)
Grüße,Robert
-
.Hallo MaikJ,
entschuldige erst mal, dass ich bisher nicht geantwortet habe (Erkältung). Für die von Dir gewünschten Informationen heißt das Zauberwort Windows Management Instrumentation (WMI). Diese kannst Du in. NET mit Hilfe des Namespace System.Management an programmieren. Leider bietet aber auch WMI keine Möglichkeit einen Netzwerktreiber zu erkennen. (Mir ist in .NET auch keine andere Möglichkeit bekannt)
Eine Einführung in WMI findest Du hier:
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Zum Thema WMI und .NET:
http://msdn.microsoft.com/en-us/library/aa720264(VS.71).aspx
Bevor Du jetzt loslegst hier ein schneller Überblick über die Vorgehensweise:
1.Öffne Dein Projekt im Visual Studio
2.Öffne den Server-Explorer des Visual StudiosIm Baum findest Du unter Server einen Knoten namens Verwaltungsklassen. Wenn Du in den Verwaltungsklassen den gewünschten Eintrag (z.B. Betriebssystem) findest kannst Du den folgenden Arbeitsschritt überspringen.
3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken4.Verwaltungsklasse markieren - Kontextmenü Verwaltete Klasse generieren
Das Visual Studio fügt nun ausreichend Code in Dein Projekt ein, um alle Eigenschaften der Verwaltungsklasse auszuwerten.
Schöne Grüße
Oliver
Hi Oliver.
Ja, keine Eile. Ist doch keine Pflicht hier zu antworten :). Außerdem geht die Gesundheit vor. Auf diesem Wege, gute Besserung.
Auf alle Fälle erst mal Danke für die kleine Einleitung. Die Sache mit WMI habe ich auch schon überall gelesen. Bin leider der englischen Sprache nicht so mächtig. :(
Zum Netzwerktreiber: Hierzu habe ich eine Seite gefunden, die ein Code veröffentlicht hat, die womöglich dieses kann.
http://dotnet-snippets.de/dns/vbnet-wmi-hardware-wrapper-SID312.aspx
'Networking Device Classes _NetworkAdapter _NetworkAdapterConfiguration _NetworkAdapterSetting
Irgendwie kapiere ich das nicht oder habe das falsch verstanden.
Für das Auslesen des Betriebssystems und Netzwerkdaten (Hardware) sind zwei Klassen erforderlich? Oder ist das nur die eine System.Management?
Mit der Vorgehensweise komme ich nicht wirklich klar.
Habe das Projekt geöffnet, aber ab dem Punkt 2.Öffne den Server-Explorer des Visual Studios ist Feierabend bei mir. Habe so vieles angeklickt, aber konnte hierzu nichts finden.
Auf der rechten Seite habe ich den Projektmappen-Explorer. Als Reiter gibt es da noch die Klassenansicht.
Finde ehrlich gesagt keine Möglichkeit, die WMI-Klasse(n) hinzuzufügen. ?!?!?!
Wenn ich das nicht herausbekommen habe, kann ich da leider nicht weitermachen ^^
Grüße
MaikJ -
Hallo MaikJ,
ich habe Punkt 5 vergessen. Anbei ein kleines CodebeispielImports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim customer As String = "customer1" 'nur ein Beispiel Dim datum As String = "1.12.2009" 'nur ein Beispiel kann auch mit einer DateTime Methode befüllt werden Dim filename As String = customer + "_" + datum Dim path As String = "c:\temp\" + filename + ".txt" Dim infotext As String = "Hier würden die Systeminfos stehen" Dim swr As StreamWriter = File.CreateText(path) swr.WriteLine(infotext) swr.Flush() swr.Close() End Sub End Class
Schöne Grüße
Oliver
Hi Oliver.
Verstehe auch noch nicht recht so, aber soweit ist es aber noch nicht. :)
Soviel habe ich verstanden -
Public Class Form1 brauche ich ja theoretisch nicht, da in diesem Form-Code schon dieser Anfang existiert. Falls nicht, dann dieses Form1 in das aktuelle Forum-Element umschreiben.
Button1_Click, ds habe ich kapiert :).
Customer wäre die Kundennummer oder? Wird die aus dem Feld ausgelesen, die der Kunde eingegeben hat? Aber soweit ich das sehe, ist Customer schon vordefiniert.
Gleiche gilt auch für das Datum. Aber hast ja auch geschrieben, ist ein Beispiel. :) Aber der werde ich sicherlich Hilfe brauchen (customer + datum). :)
Das mit dem Systeminfos (Infotext): Da brauche ich sicherlich auch Hilfe. Also alle Daten, die der Kunden eingegeben hat und was das programm ausgelesen hat. :)
Aber Danke dafür. Ist schon mal was, damit ich ein Anhaltspunkt habe. Kommt aber später dran.
Grüße MaikJ- Bearbeitet Robert BreitenhoferModerator Freitag, 4. Dezember 2009 10:32 Formatierung
-
Hallo MaikJ,
zunächst möchte ich Dich bitten, nicht jedesmals meine Postings komplett als Zitat in Deine Antworten zu übernehmen. Dies bläht den Text auf und macht die Posting eher unleserlich.
Fangen wir mit den einfachen Dingen an.
Ja, Customer wäre bei dir die Kundennummer (ist eben nur als Beispiel gedacht gewesen - was Du ohne Änderungen hättest sofort testen können)
Ja, ich gehe davon aus das die Werte irgendwie befüllt werden (Textbox, ComboBox o.ä.)
Die entsprechende Programmzeile (Beispiel ComboBox) würde wie folgt aussehen:
Dim customer As String = ComboBox1.TextBei einer Textbox steht da: TextBox1.Text usw.
Kommen wir zum zweiten Feld dem Datum. Das Datum wird man in der Regel mit einem DateTime Objekt ermitteln. Dann hast Du aber zwei Probleme:
Erstens ist DateTime kein String. Du musst Dein Objekt konvertieren:
System.Convert.ToString(DateTime.Now)Zweitens stehen jetzt Doppelpunkte in Deinen String (als Trennzeichen im Bereich der Uhrzeit - zwischen Stunden, Minuten und Sekunden). Die müssen weg, weil sie als Bestandteil eines Filename nicht erlaubt sind und somit eine Exceptionen auslösen. Also nächster Arbeitsschritt - Formatierung.Hier verweise ich Dich auf die MSDN Library, weil die Anzahl der Optionen für FormatDateTime zu viele sind um Sie hier aufzuzählen.
http://social.msdn.microsoft.com/Search/de-DE?query=Date%20Format&ac=3.
Zum Schluß der String Infotext ist wieder nur ein Beispiel. Die Befüllung läuft genauso wie bei Customer.
So das war es erstmal, den Rest beantworte ich später (die Arbeit ruft)
Schöne Grüße
Oliver -
Hallo MaikJ,
es folgt eine kleine Bildershow
1.Öffne Dein Projekt im Visual Studio
2.Öffne den Server-Explorer des Visual Studios
http://ehtbfg.blu.livefilestore.com/y1pVy8o8os6Em-S0NtMCmGJvASbm0ctKIHcwiPfoMaAjeFqfmig5qhNMkIUH1r4pfx1_WR1OrCm5DuPFqG9abZy24e1nE7tmlYD/SE1.jpg
Im Baum findest Du unter Server einen Knoten namens Verwaltungsklassen. Wenn Du in den Verwaltungsklassen den gewünschten Eintrag (z.B. Betriebssystem) findest kannst Du den folgenden Arbeitsschritt überspringen.
http://ehtbfg.blu.livefilestore.com/y1pKjXhEICTgg_PKoKV6vleJiMRNXlhA8R8HOYeUl48dOVHvIL7YDqec_UZ9RNVguLSagYAYlOwItOVPADddCGlvG-OZnwWj3tL/SE2.jpg
3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken
http://ehtbfg.blu.livefilestore.com/y1pe6exegs4ZnX1eKzVi29xi9cin6TQyHAHFsLjPCgfBHwdqNG0q4rf18j8os91W-kQwlRFDSf0W6k2-qPFcYNd-g16ifT9IjVU/SE5.jpg
http://ehtbfg.blu.livefilestore.com/y1pBBTl73mvlxZA0VhTNxO1bs9RIof_rBC7XSY2zOMjIQl0cndYh6mLXWge4LRVW1-GGOnP27DN4EFejVTX5957nf65xuwCd6bz/SE5b.jpg
4.Verwaltungsklasse markieren - Kontextmenü Verwaltete Klasse generieren
http://ehtbfg.blu.livefilestore.com/y1paZi197M1tAWCHEg2uTnSrpIZCTHSifh1vNaZNULyiyvU1zVHyMM75OAZRNo72jZxK-bQ0je9NiNfpuJIlYbNB-ZKR9TYJzmf/SE3.jpg
Das Visual Studio fügt nun ausreichend Code in Dein Projekt ein, um alle Eigenschaften der Verwaltungsklasse auszuwerten
http://ehtbfg.blu.livefilestore.com/y1pmRVToJOfEWLZ2GtSbo_joQcqlcV7VLiht9m131PMExFPgt5DTe2kcLq_vuNSYo31MUg6o7A53IHeRFLSIQyiOolC2hjkEEoq/SE4.jpg
Ich hoffe das hilft.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Sonntag, 6. Dezember 2009 09:35
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Servus Oliver.
Ok, Zitierfunktion lasse ich mal weg :).
Danke für die Mühe, die Du Dir gemacht hast.
Server-Explorer war bei: Extras -> Mit dem Server verbinden... -> abbrechen
Im Projektmappen-Explorer wurden zwei Dateien hinzugefügt:
ROOT.CIMV2.Win32_NetworkAdapter.vb
ROOT.CIMV2.Win32_OperatingSystem.vb
Ich rätsel schon eine lange Zeit, wie ich
Dim CI As New Microsoft.VisualBasic.Devices.ComputerInfo MessageBox.Show(CI.OSPlatform) MessageBox.Show(CI.OSVersion) MessageBox.Show(CI.OSFullName)
das in meine MaskedTextBox1 rein bekomme.
Habe schon im Netz gesucht, was dieses MessageBox überhaupt heißt. Soviel ich verstanden habe, soll da ein "PopUp-Fensterchen / Alert-Fensterchen" aufgehen.
Grüße
MaikJ -
Hallo MaikJ,
um es kurz zu machen, eine MessageBox ist einfach nur ein Meldungsfenster. Welche Möglichkeiten Du zur Ausgestaltung der Messagebox hast findest Du hier:
http://msdn.microsoft.com/de-de/library/system.windows.forms.messagebox.show.aspx
Eigene Controlelemente bekommst Du da aber nicht rein, es sei denn Du würdest dir eine eigene MessageBox-Klasse schaffen. Dann hätten wir aber gleich die nächste Baustelle mit vielen Fragen.
Schöne Grüße
Oliver -
Hallo MaikJ,
Die Eigenschaften OSPlatform, OSVersion und OSFullName sind als String Typ.
Diese passen in der Text Eigenschaft des MaskedTexBox Steuerelementes wie zum Beispiel:
Dim CI As New Microsoft.VisualBasic.Devices.ComputerInfo '//MaskedTextBox Steuerlement MaskedTextBox1.Text = CI.OSPlatform MaskedTextBox2.Text = CI.OSVersion MaskedTextBox3.Text = CI.OSFullName
Da diese Eigenschaften ReadOnly sind und die TextBox Kontrolle mehr für Einträge geeignet ist, frage ich Dich warum Du nicht ein Label Steuerelement verwendest um diese Eigenschaften zu anzeigen?Dim CI As New Microsoft.VisualBasic.Devices.ComputerInfo '//Label Steuerelement Label1.Text = CI.OSPlatform Label2.Text = CI.OSVersion Label3.Text = CI.OSFullName
Grüße,Robert
-
Hi Oliver und Robert.
Danke. Habe das gestern schon irgendwie durch lesen selber herausfinden können.
Label habe nicht genutzt, da es da kein Multiline? gibt.
Richtextbox stört mich der komische Border.
Hab's zumindest via TextBoxen gelöst. :)
Aber jetzt kommt der Oberknaller, d.h. harter Knochen. :) Versuche theoretisch noch die aktuell verwendete Netzwerkkarte/adapter auszulesen.
Habe hier und da schon gelesen, aber was begreifbares habe ich da nichts gefunden.
Hier oben Thread habe ich schon eine WMI Variante gepostet (Link). Nur konnte ich das nicht testen, weil ich das nicht hin bekommen habe.
Außerdem denke ich, dass die WMI Variante alle Netzwerkadapter ausliest.
Habe mit dem WMI Code Creator eigentlich den Code gefunden/generiert (das hat schon lange gedauert, bis ich das herausgefunden habe), den ich benötige.
Nur wird der folgende Code in der Konsole ausgeführt.
Imports System Imports System.Management Imports System.Windows.Forms Namespace WMISample Public Class MyWMIQuery Public Overloads Shared Function Main() As Integer Try Dim searcher As New ManagementObjectSearcher( _ "root\CIMV2", _ "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface") For Each queryObj As ManagementObject in searcher.Get() Console.WriteLine("-----------------------------------") Console.WriteLine("Win32_PerfFormattedData_Tcpip_NetworkInterface instance") Console.WriteLine("-----------------------------------") Console.WriteLine("Name: {0}", queryObj("Name")) Next Catch err As ManagementException MessageBox.Show("An error occurred while querying for WMI data: " & err.Message) End Try End Function End Class End Namespace
Kann leider auch nichts brauchbares finden (auch MSDN), wie ich das Ergebnis in eine TextBox bekomme (ohne einen Button zu klicken).
Habe schon versucht das Problem selber zu lösen, aber zu keinem Ergebnis gekommen.
Diesen Befehl "Console.Writeline" kann man via TextBoxWriter lösen.
Nur habe ich kein Plan, wie ich den o.g. Code mit den TextBoxWriter-Code zusammensetzen kann.
Public Class TextBoxWriter Inherits System.IO.TextWriter Private control As TextBoxBase Private Builder As StringBuilder Public Sub New(ByVal control As TextBox) Me.control = control AddHandler control.HandleCreated, _ New EventHandler(AddressOf OnHandleCreated) End Sub Public Overrides Sub Write(ByVal ch As Char) Write(ch.ToString()) End Sub Public Overrides Sub Write(ByVal s As String) If (control.IsHandleCreated) Then AppendText(s) Else BufferText(s) End If End Sub Public Overrides Sub WriteLine(ByVal s As String) Write(s + Environment.NewLine) End Sub Private Sub BufferText(ByVal s As String) If (Builder Is Nothing) Then Builder = New StringBuilder() End If Builder.Append(s) End Sub Private Sub AppendText(ByVal s As String) If (Builder Is Nothing = False) Then control.AppendText(Builder.ToString()) Builder = Nothing End If control.AppendText(s) End Sub Private Sub OnHandleCreated(ByVal sender As Object, _ ByVal e As EventArgs) If (Builder Is Nothing = False) Then control.AppendText(Builder.ToString()) Builder = Nothing End If End Sub Public Overrides ReadOnly Property Encoding() As System.Text.Encoding Get Return Encoding.Default End Get End Property End Class Private writer As TextBoxWriter = Nothing Private Sub Form2_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'MaskedTextBox3 As System.Windows.Forms.MaskedTextBox writer = New TextBoxWriter(MaskedTextBox3) Console.SetOut(writer) End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Console.WriteLine("This is some redirected text") End Sub
Die Zeile mit "writer = New TextBoxWriter(MaskedTextBox3)" ist bei mir immer blau hinterlegt. (Der Wert vom Typ "System.Windows.Forms.MaskedTextBox" kann nicht in "System.Windows.Forms.TextBox" konvertiert werden.)
Wie man sieht, selbst mit einem Button klappt das nicht. Selbst wenn ich die ausgeblendete Zeile reinnehme - nichts.
Ohne Button wäre das natürlich sehr gut. :)
Hm ..... ????? -
Hallo MaikJ,
Du versuchst gerade das Rad neu zu erfinden - Oder? Also, was willst Du machen? - Text in eine Textbox schreiben? Dafür braucht man doch keinen neuen Writer, das kann man mit dem StringWriter oder StreamWriter auch.
Nun zum Thema Button: Nein einen Button brauchst Du nicht unbedingt. Ein auslösendes Event (Changed, Load, Click ...) muß aber vorhanden sein, sonst fängt kein Writer an zu arbeiten.
Also überdenk noch mal Dein Programmdesign und denk in etwas einfacheren Dimensionen.
Schöne Grüße
Oliver -
Hi Oliver.
Ne, das Rad ist schon gut, wie es heute schon ist. :)
Mir geht es momentan um den aktuellen genutzten Netzwerkadapter. Der o.g. (der obere davon) genannte Code kann dieses auslesen.
Die WMI-Variante aber liest alle Netzwerkadapter aus. Das brauche ich nicht.
Aber der o.g. Code liest aber genau das aus, was ich benötige.
Nur wird dieser Code via Console (cmd.exe) ausgelesen. Nur diese Daten brauche in einer Textbox.
Oder kann man den Code so umschreiben, dass dies ohne Console ausgelesen werden kann?
Die TextWriter-Funktion soll eigentlich dieses lösen, also den Netzwerkadapter in die Textbox schreiben.
Eine einfache Lösung habe ich bisher nicht finden können.
Nur wie ich das umsetzen kann, ist für mich ein Rätsel.
Das Speichern allgemein klappt bisher. Da hast Du mir schon geholfen.
Grüße
MaikJ -
Hallo MaikJ,
was ich mit meinen Posting ausdrücken wollte alle Writer sind relativ gleich. Zum Beispiel eine WriteLine - Methode haben die anderen Writer auch. Guck Dir die entsprechenden Beispiele in der MSDN Library an, dann fällt der Umbau des Codesnippets leicht.
http://msdn.microsoft.com/de-de/library/system.io.streamwriter.aspx
http://msdn.microsoft.com/de-de/library/system.io.stringwriter.aspx
Schöne Grüße
Oliver -
Hallo MaikJ,
ich habe Dein kleines Codebeispiel mal umgeschrieben (damit Du es gleich testen kannst, habe ich es in Form_Load eingebunden)Imports System.IO Imports System.Management Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Dim searcher As New ManagementObjectSearcher( _ "root\CIMV2", _ "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface") TextBox2.AppendText("-----------------------------------" & Environment.NewLine) TextBox2.AppendText("Win32_PerfFormattedData_Tcpip_NetworkInterface Instance" & Environment.NewLine) TextBox2.AppendText("-----------------------------------" & Environment.NewLine) Dim s1 As String = "" For Each queryObj As ManagementObject In searcher.Get() s1 = queryObj("Name").ToString TextBox2.AppendText(s1 & Environment.NewLine) Next Catch err As ManagementException MessageBox.Show("An error occurred while querying for WMI data: " & err.Message) End Try End Sub End Class
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 8. Dezember 2009 14:25
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 17. Dezember 2009 08:22
-
Huhu. :)
Hab ´nen Problem mit der Zeit.
Binde die Zeit nicht das File, stattdessen in eine TextBox.
Die Zeit wird auch ausgelesen (aktuelle Systemzeit), aber zählt nicht weiter (?).
Was habe ich gemacht?
Toolbox -> Timer -> auf die Entwurfebene gezogen.
Name: timePicker
Enabled = True
Interval = 100
Toolbox -> MaskedTextBox -> auf die Entwurfebene gezogen
Name: TextBox_zeit
Imports System.Windows.Forms.Timer Private Sub DateTimeTicker_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Liest aktuelle Datum aus DateTimePicker1.Value = Now End Sub Private Sub InitializeTimePicker() Dim timePicker As DateTimePicker timePicker = New DateTimePicker() timePicker.Format = DateTimePickerFormat.Time 'timePicker.ShowUpDown = True 'timePicker.ShowCheckBox = True timePicker.Enabled = True Controls.Add(timePicker) End Sub Private Sub DateTime_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox_zeit.Text = Today & " " & TimeOfDay End Sub Private Sub timePicker_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timePicker.Tick timePicker.Start() timePicker.Interval = 100 End Sub
Hm. Also die Uhrzeit bleibt stehen. ???
Jemand einen Tipp? -
Hallo MaikJ,
Dein Code verwirrt mich etwas. Einerseits hättest Du gerne eine laufende Uhr (das ist ein Timer-Control), andererseits ist Dein timePicker aber als DateTimePicker-Control definiert, was eindeutig ganz was anderes ist. Was sollst denn nun werden?
Schöne Grüße
Oliver -
Hi Oliver.
:) Da habe ich wohl was durcheinander gebracht.
Gelöst wie folgt:
Toolbox -> Timer -> auf die Entwurfsebene gezogen.
Name: timePicker
Enabled = True
Interval = 100
Private Sub Form_Zeit_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load TextBox_zeit.Text = Today & " " & TimeOfDay End Sub Private Sub Timer_Zeit_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick TextBox_zeit.Text = Today & " " & TimeOfDay Timer1.Start() Timer1.Interval = 100 End Sub
Was es wird, möchte ich nicht öffentlich machen :).
Habe keine Möglichkeit gefunden, hier auf der Plattform, Dir eine PN zu schicken.
Danke Dir. -
Hi MaikJ,
eine Kontaktmöglichkeit findest Du auf meinen Blog (unter Profil)
http://connectedsystems-de.blogspot.com/
Schöne Grüße
Oliver -
Hi Oliver.
Hast 'ne E-Mail. :)
Die Sache mit den Speichern ist für mich nicht wirklich abgeschlossen. :(
Private Sub cmdSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSpeichern.Click ' Prüfung ob alle Felder ausgefüllt sind If TextBox_customer.Text = "" Then MsgBox("Eingabe erforderlich!") End If ' Definierung ' Code ... bla bla ' Abschluss (Zusammenfassung der Definierung) ' Code bla bla ' Schreibe Daten in Datei Dim swr As StreamWriter = File.CreateText(path) swr.WriteLine(kd_txt) ' Code ... bla bla swr.Flush() swr.Close() End Sub
Würde gerne überprüfen lassen, ob alle Felder ausgefüllt sind.
Dies geht mit der o.g. IF-Methode.
Ich weiss, die ist falsch gesetzt, da bei der o.g. Methode, trotzdem eine Datei angelegt wird.
Habe aber bisher nicht wirklich was Brauchbares gefunden, wie ich das umsetzen kann, dass vor dem Speichern eine Überprüfung stattfindet, und wenn alle Felder ausgefüllt worden sind -> abspeichern.
Suche aber noch weiter nach Lösungen ....
Grüße
MaikJ -
Hallo MaikJ,
vielleicht solltest Du nicht prüfen ob ein String leer ist (If TextBox_customer.Text = "") sondern ob er gefüllt ist (If TextBox_customer.Text <> ""). Dann kannst Du deinen Code so aufbauen, dass die Schreibaktion nur dann erreicht wird, wenn alle Felder gefüllt sind.
If (TextBox2.Text <> String.Empty) Then If (TextBox3.Text <> String.Empty) Then Dim swr As StreamWriter = File.CreateText(Path) swr.WriteLine(kd_txt) swr.Flush() swr.Close() Else MessageBox.Show("Feld muss gefüllt sein") End If Else MessageBox.Show("Feld muss gefüllt sein") End If
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Oliver Michalski Dienstag, 22. Dezember 2009 09:22
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 22. Dezember 2009 14:11
-
Hi Oliver.
Super Lösung. Klappt wunderbar.
Habe es Dank Deiner Hilfe so gelöst:
If (TextBox_customer.Text <> String.Empty) Then If (TextBox_name.Text <> String.Empty) Then ' Schreibe Daten in Datei Dim swr As StreamWriter = File.CreateText(path) swr.WriteLine(kd_txt) swr.WriteLine(kd_txt2) swr.Flush() swr.Close() Else MessageBox.Show("Vor- und Zunamen eingeben.") Dim error_name As String = TextBox_name.Text TextBox_name.BackColor = Red TextBox_name.ForeColor = White End If Else Dim error_customer As String = TextBox_customer.Text TextBox_customer.BackColor = Red TextBox_customer.ForeColor = White MessageBox.Show("Kundennummer eingeben.") End If
Inkl. Hintergrundfarbe des Feldes in Rot.
Problem habe ich mit den Textboxen, die eine Maske haben.
Mask = 000/000
Ausgabe in Textbox: ___.___
Diese Empty-Abfrage tritt hier nicht in Kraft, da der Punkt als nicht "leer" definiert wird. Sprich, dass Feld wird nicht geprüft. Hm ...
Zusatz: Habe ein Textbox (Multiline) mit Text gefüllt (klar, gell? :)). Wenn man das Programm öffnet, ist dieser Text immer markiert. Wieso?- Bearbeitet McCimberly Montag, 21. Dezember 2009 15:21 Zusatz hinzugefügt
-
Hallo MaikJ,
bei MaskedTextBoxen prüft man auf MaskCompleted = true. Dies stellt sicher das eine Eingabe vorhanden ist (Achtung - Ersetzt aber nicht die Validierung der Eingabe).
Dein Problem mit der Multiline kann nicht nachvollziehen, da ich den Zustand nicht reproduzieren kann.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Oliver Michalski Dienstag, 22. Dezember 2009 12:57
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 22. Dezember 2009 14:11
-
Holla Oliver.
Perfekt. Funktioniert tadellos. Danke für den Tipp.
Gelöst wie folgt (auch für die, die das hier lesen und gebrauchen könnten):
If TextBox_maxDL.MaskCompleted = True Then ' weiterer Code Else MessageBox.Show("txt - Fehlermeldung") Dim error_maxDL As String = TextBox_maxDL.Text TextBox_maxDL.BackColor = Red TextBox_maxDL.ForeColor = White TextBox_maxDL.Mask = "000/000" End If
Das Problem mit einer anderen Textbox: Dort drin ist logischerweise Text, der nach dem Öffnen des Programms immer markiert ist. Kann mir nicht erklären, woran das liegen könnte.
Sonst habe ich bisher nichts :)
Schöne Grüße
MaikJ- Bearbeitet McCimberly Dienstag, 22. Dezember 2009 15:37 Buchstabe "s" vergessen ^^
-
Huhu.
Nun habe ich ein Problem oder besser gesagt, ich finde da nicht wirklich eine vernünftige Antwort.
Suche schon so ca. 2 Stunden und finde nicht wirklich was. :(
Und kapieren kann gar nicht die Rede sein.
Projekt -> Veröffentlichen
Unten steht die Version des Programms. (Hauptversion, Nebenversion, Build, Revision)
Dieses würde ich gerne in einer Form anzeigen lassen.
Nur übernimmt der diese nicht wirklich.
Public NotInheritable Class Info Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Build, My.Application.Info.Version.Minor, My.Application.Info.Version.Revision) End Sub End Class
Label mit dem Namen "Version" erstellt.
Als Text: Version {1}.{0}.{0}.{0}
Irgendwie spuckt der mir nicht das aus, was im Projekt steht.
Irgendwo habe ich gelesen, dass man das nur in der AssemblyInfo.vb ändern und auslesen kann.
Nicht wirklich die Lust, die Version manuell zu ändern.
Kapiere das Ganze irgendwie nun überhaupt nicht.
Für mich sind das zwei unterschiedliche Dinge. (???)
Hm ... ?? -
Hallo MaikJ,
Schau Dir die folgende Diskussion an. Vielleicht findest Du etwas dass Dir weiter helfen kann.
http://social.msdn.microsoft.com/forums/en-US/vbide/thread/1daf98b9-a6cf-4fe6-a7da-ba58a56de575
http://www.codeproject.com/KB/macros/versioningcontrolledbuild.aspx
Grüße,
Robert
-
Im Vorab: Frohes und besinnliche Weihnachtsfeiertage. (auch wenn ich schon ein Extra-Thread eröffnet habe - und keiner antwortet - komisch)
Hi Robert.
Danke für beiden Links. Englisch - naja, verstehe da nicht sehr viel. :)
Aber das Tool "Versioning Controlled Build" hat mir zumindest weiter geholfen (zweiter Link).
Mit folgendem Code, wird nun die korrekten Angaben ausgegeben (könnte für andere Leser auch interessant sein).
Label mit dem Namen: Version.Text
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim aAssembly As [Assembly] = _ System.Reflection.Assembly.GetExecutingAssembly Dim aDescAttr As AssemblyDescriptionAttribute = _ AssemblyDescriptionAttribute.GetCustomAttribute( _ aAssembly, GetType(AssemblyDescriptionAttribute)) Dim aTitleAttr As AssemblyTitleAttribute = _ AssemblyTitleAttribute.GetCustomAttribute( _ aAssembly, GetType(AssemblyTitleAttribute)) Version.Text = "Firma: " + vbNewLine + Application.CompanyName.Trim + vbNewLine + vbNewLine + "Produktname: " + vbNewLine + Application.ProductName.Trim + vbNewLine + vbNewLine + "Produktversion: " + vbNewLine + Application.ProductVersion.Trim + vbNewLine + vbNewLine + "Speicherort: " + vbNewLine + Assembly.GetEntryAssembly().Location End Sub
So, jetzt verbessere ich das Programm optisch (Grafiken einbinden, usw.) noch ein wenig, dann sollte es eigentlich fertig sein.
Ich nutze doch eine RichTextBox, um eine txt-Datei einzubinden. Dummerweise kann man bei der RichTextBox den Hintergrund nicht auf transparent stellen (laut Eigenschaftsanzeige).
Jemand ein Rat? Vielleicht in Label ausgeben (transparent, scrolling)?
Grüße
MaikJ -
Hallo MaikJ,
Dir auch schöne Weihnachten (da ich die letzten Tage mit Vorbereitungen für zwei umfangreiche Essen beschäftigt war, hatte ich vorher keine Zeit zum posten).
Nun zur deiner Frage nach der Transparenz von Controls. Die Eigenschaften heissen TransparencyKey (Welche Farbe soll transparent werden) und Opacity (In welchen Grad - Prozentsatz - soll das Element transparent werden). Nun der negative Teil der Antwort. In einer WinForms-Anwendung (also abgeleitet von System.Windows.Forms) hat nur das Forms-Element diese Eigentschaften zur Verfügung.
Anders sieht das bei WPF-Anwendungen aus. Alle von der UIElement-Klasse (also auch die WPF-RichTextBox) verfügen zumindesten über die Eigenschaft Opacity. Damit kannst Du Transparenz erzielen. Deine komplette GUI müsstest Du dann aber neu machen.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Oliver Michalski Samstag, 26. Dezember 2009 13:06
-
Hi Oliver.
Danke. Kein Problem, es ist doch (noch) Weihnachten. :)
Hui hui - die GUI müsste man neu machen. Ne, dann mache ich lieber den Hintergrund weiss :). Aber gut zu wissen, dass diese Möglichkeit gegeben ist.
Habe mich gestern arg geärgert, dass plötzlich MenuStrip weg war. War ein haufen Arbeit, dass wieder so herzustellen, wie es vorher mal was.
Bin auch mit dem Programm soweit fertig. Ist schon weggeschickt worden. Warte also nur auf eine Antwort :).
Danke.
Nun überlege ich, was ich vielleicht noch einbinden kann. Vermutlich ein Online-Updater. Aber die Update-Geschichte in MSV2008 hat bei mir die Tage nicht wirklich funktioniert. Also ein eigenen Online-Updater. Aber da mache ich mich noch schlau, wie man so was umsetzen kann.
Wie bei JavaScript, gibt es in VS auch die Möglichkeit Toggle's einzubauen.
Also klickt man auf einen Link, erscheint, wo man es möchte, der Inhalt?
Grüße
MaikJ