none
Viele Fragen: Netzwerk, GetSystemInfos, Speicherung in Datei RRS feed

  • 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


    Montag, 30. November 2009 18:29

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 Studios

    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.

    3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
    gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken

    4.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

    Donnerstag, 3. Dezember 2009 10:29
  • 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

    Dienstag, 8. Dezember 2009 14:24
  • 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
    Dienstag, 22. Dezember 2009 09:50
  • 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
    Dienstag, 1. Dezember 2009 18:46
  • Hallo MaikJ,

    ich habe Punkt 5 vergessen. Anbei ein kleines Codebeispiel
    Imports 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
    Donnerstag, 3. Dezember 2009 12:23
  • 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

    Freitag, 4. Dezember 2009 11:07
  • 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
    Montag, 21. Dezember 2009 09:26

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
    Montag, 30. November 2009 20:00
  • 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
    Dienstag, 1. Dezember 2009 16:58
  • 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
    Dienstag, 1. Dezember 2009 18:46
  • Zu den übrigen Punkten niemand eine Idee? :)
    Mittwoch, 2. Dezember 2009 15:54
  • .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 Studios

    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.

    3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
    gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken

    4.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

    Donnerstag, 3. Dezember 2009 10:29
  • Hallo MaikJ,

    ich habe Punkt 5 vergessen. Anbei ein kleines Codebeispiel
    Imports 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
    Donnerstag, 3. Dezember 2009 12:23
  • 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

    Donnerstag, 3. Dezember 2009 13:29
    Moderator
  • .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 Studios

    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.

    3.Verwaltungsklassen markieren - Kontextmenü Klasse hinzufügen - unter root\CIMV2
    gewünschte Verwaltungsklasse auswählen - Hinzufügen drücken - OK drücken

    4.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
    Donnerstag, 3. Dezember 2009 17:28
  • Hallo MaikJ,

    ich habe Punkt 5 vergessen. Anbei ein kleines Codebeispiel
    Imports 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
    Donnerstag, 3. Dezember 2009 17:38
  • 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.Text

    Bei 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

    Freitag, 4. Dezember 2009 09:08
  • 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

    Freitag, 4. Dezember 2009 11:07
  • 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
    Freitag, 4. Dezember 2009 17:35
  • 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
    Sonntag, 6. Dezember 2009 09:17
  • 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

    Sonntag, 6. Dezember 2009 09:34
    Moderator
  • 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 ..... ?????
    Montag, 7. Dezember 2009 09:52
  • 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
    Dienstag, 8. Dezember 2009 09:29
  • 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
    Dienstag, 8. Dezember 2009 09:48
  • 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
    Dienstag, 8. Dezember 2009 11:37
  • 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

    Dienstag, 8. Dezember 2009 14:24
  • Hi Oliver.

    Bin völlig aus dem Häuschen :).
    Klappt wunderbar. Zauberwort heißt da "AppendText". *notier*

    Klasse. Vielen vielen Dank. :) :)

    Grüße
    MaikJ
    Mittwoch, 9. Dezember 2009 11: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?
    Dienstag, 15. Dezember 2009 20:10
  • 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
    Mittwoch, 16. Dezember 2009 09:01
  • 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.
    Freitag, 18. Dezember 2009 15:19
  • Hi MaikJ,

    eine Kontaktmöglichkeit findest Du auf meinen Blog (unter Profil)

    http://connectedsystems-de.blogspot.com/

    Schöne Grüße
    Oliver
    Samstag, 19. Dezember 2009 09:26
  • 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
    Samstag, 19. Dezember 2009 21:38
  • 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
    Montag, 21. Dezember 2009 09:26
  • 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
    Montag, 21. Dezember 2009 15:16
  • 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
    Dienstag, 22. Dezember 2009 09:50
  • 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 ^^
    Dienstag, 22. Dezember 2009 15:36
  • 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 ... ??
    Dienstag, 22. Dezember 2009 18:09
  • 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

    Mittwoch, 23. Dezember 2009 21:03
    Moderator
  • 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
    Freitag, 25. Dezember 2009 11:19
  • 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
    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

    Samstag, 26. Dezember 2009 14:40