Laden...

Forenbeiträge von Padman Ingesamt 52 Beiträge

06.09.2017 - 22:27 Uhr

Hat wohl doch nun geklappt 😁

Leider hatte ich den hier übersehen 👍_SetWebbrowserVersion(deineWebBrowserControlInstanz)_

Anscheinend kommt die Umstellung der IE-Version etwas zu spät und das Programm muss nochmal neu gestartet werden damit der Web-Inhalt richtig geladen wird...

Ansonsten erstmal vielen Dank für die Lösung 🙂

Ach so, stellt unsafe ein Sicherheitsrisiko dar oder wie ist es dort gemeint?

Habe ein Beispiel gefunden welches den Reg-Eintrag wieder löscht 😁

            string keyName = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
            {
                if (key == null)
                {
                    // Key doesn't exist. Do whatever you want to handle
                    // this case
                }
                else
                {
                    key.DeleteValue(Process.GetCurrentProcess().ProcessName + ".exe");
                }
            }

Quelle: stackoverflow.com/questions/531151/how-to-delete-a-registry-value-in-c-sharp

Hmm, mir fällt gerade auf, dass die bestimmte Seite erst beim 2. Anlauf erst richtig läd...

Gäbe es überhaupt eine Möglichkeit das Kontextmenü zu beschränken dass zumindest einige Einträge verschwinden? Es soll zumindest möglich sein, dass Texte kopiert werden können 😉 aber das ist vermutlich wieder ein eigenes Thema, richtig? 😉

06.09.2017 - 21:41 Uhr

Ich sage doch, ich stehe leider auf dem Schlauch 🙁

Wo wäre dann dieses irgendwo? 😉

Hier der komplette Code:

using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Win32;
using System;
using System.Runtime.InteropServices;

namespace SimpleBrowser
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// Aktiviert die aktuellen InternetExplorer-Features für das WebBrowser-Control
        /// </summary>
        public void SetWebbrowserVersion(WebBrowser webBrowser)
        {
            int registryValue = (webBrowser.Version.Major >= 11) ? 11001 : (webBrowser.Version.Major == 10) ? 10001 : (webBrowser.Version.Major == 9) ? 9999 : (webBrowser.Version.Major == 8) ? 8888 : 7000;
            string registryKeyPath = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
            using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(registryKeyPath, true) ?? Registry.CurrentUser.CreateSubKey(registryKeyPath))
                registryKey.SetValue(Process.GetCurrentProcess().ProcessName + ".exe", registryValue, RegistryValueKind.DWord);
        }

        /// <summary>
        /// Beschränkt die Persistenz von Cookies im WebBrowser-Control auf den aktuellen Prozess
        /// </summary>
        public static unsafe void SuppressWininetBehavior(WebBrowser webBrowser)
        {
            int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
            int* optionPtr = &option;

            if (!InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int)))
                throw new Exception("Something went wrong !>?");
        }
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InternetSetOption(int hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);

        public Form1()
        {
            InitializeComponent();
        }
    }
}

Der Designer enthält das Element WebBrowser...

Jetzt wäre die Frage wie es nun aktiviert werden könnte 😉

06.09.2017 - 19:59 Uhr

Ich hatte lange Zeit in C# nichts mehr gemacht gehabt und mir geht's momentan auch nicht so gut und in C# bleibe ich wohl weiterhin Daueranfänger, von daher stehe ich leider auf dem Schlauch 🙁

Wo sollte _webBrowserControl1.SetWebbrowserVersion()`;[/i] stehen ohne das eine Fehlermeldung erscheint?

06.09.2017 - 19:15 Uhr

Ich habe mal beide Sachen eingebaut, wobei this entfernt werden musste da sonst Fehler auftauchten. Ich habe ja bereits das eine Element webBrowser im Designer eingefügt gehabt, aber Änderungen gab es jetzt keine, muss noch was bestimmtes gemacht werden?

06.09.2017 - 16:01 Uhr

Das Problem ist, das allgemein auch andere Seiten aufgerufen werden sollen, von daher besteht nicht die Möglichkeit den Inhalt selber zu bestimmen.

Den Code vom Beispiel hatte ich mir ja angeschaut, aber ich weiß leider nicht, was das Nötigste wäre, damit man halt nur noch das Element samt passender IE-Version hätte.

06.09.2017 - 12:47 Uhr

Anscheinend geht es wohl nicht anders als aus der Registry zu lesen, wenn es ohne gehen würde, wäre auch nicht verkehrt.

Könnte man daraus das Nötigste rausfischen damit im Prinzip nur noch der eingebettete Browser angezeigt wird und eventuell noch ein Reload-Button?

Ich verstehe nicht warum das normale WebBrowser-Steuerelement keine Version zur Auswahl anbietet und so wie es aussieht, nur die alte Version des IE verwendet. Microsoft hätte das Steuerelement etwas aktualisieren können wenn es schon dort vorhanden ist...

05.09.2017 - 21:07 Uhr

Ich würde vermuten (ohne in die Doku geschaut zu haben), dass die installierte IE Version genutzt wird.

Das ist richtig.

Ich weiß nur, dass die Webseite ab IE 9 einwandfrei und ohne Fehlermeldungen im IE läuft, ich konnte auch ein komplettes Projekt finden, aber der Aufbau ist für mich doch etwas zu hoch, da ich sonst nur das Nötigste daraus verwendet hätte, es handelt sich um Configuring the emulation mode of an Internet Explorer WebBrowser control (cyotek.com/blog/configuring-the-emulation-mode-of-an-internet-explorer-webbrowser-control). Es kann sein dass ich momentan nur Begriffsstutzig bin da es mir nicht so gut geht...

Alternativ kannst du soetwas wie den Awesomium SDK nutzen Schaue ich mir bei Gelegenheit an, wobei die auch schon vom Alter her etwas betagt ist 😁
Die IE-Variante würde definitiv ausreichen da die Dateien nicht unbedingt zu groß sein wären 😉

05.09.2017 - 20:38 Uhr

Hallo,

ich habe mich fast kaputt gesucht. Und zwar möchte ich wissen, ob und wie das Steuerelement WebBrowser die neuere Version des IE verwenden kann?

Ich möchte eine Seite in C# via dem Steuerelement aufrufen welche aber wohl erst ab Version 9 ohne Fehler wie JavaScript funktioniert. Wäre dies möglich?

Herzlichen Dank 🙂

14.09.2016 - 15:32 Uhr

Ich habe eben folgendes gemacht, wobei jetzt [Design]-Ansicht damit nicht mehr funktioniert funktioniert, das Programm aber schon.

Designer.cs:

this.vlc.VlcMediaplayerOptions = new string[] {
        _vlcproxy};

Form1.cs:

private string _vlcproxy = "--http-proxy=Benutzer:Passwort@IP:Port";

Fehlermeldung:
The variable _vlcproxy is either undeclared or was never assigned.

Instances of this error (1)

  1. Projekt Form1.Designer.cs Line:79 Column:1

at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)

Es war halt ein Versuch, Programm läuft, Design-Ansicht so nicht.

Frage wäre, warum es damit funktioniert, aber nicht auf dem normalen Wege?

12.09.2016 - 00:45 Uhr

Hallo,
auch wenn ich keinen Plan habe, vielleicht könntest du folgendes versuchen:

DLL-Registrieren

regsvr32 %windir%\system32\wmp.dll

Notfalls mit VLC Active X and IE Webplugin V2 versuchen, dazu sollte VLC installiert sein.

10.09.2016 - 18:40 Uhr

Vielen Dank.

irgendwie bin ich zu doof, aber in welchem Abschnitt muss der Code liegen damit VLC die Werte ließt? Irgendwie passiert nichts 🙁

Für den Pfad müsste ich auch noch etwas basteln, aber um das umsetzen zu können muss VLC die Werte ebenfallös lesen. Wie könnte es umgesetzt werden, damit VLC den eigenen Code liest und nicht die Werte aus [Design]?

Hier der eigens erstellte Beispiel-Code der ebenfalls ignoriert wird:

vlcControl1.VlcLibDirectory = new DirectoryInfo("C:\\Program Files (x86)\\VideoLAN\\VLC");

Vielen Dank 🙂

PS: gibt es für das Steuerelement eine Art Prüfung ob das Medium aus dem Internet erreichbar ist und warum reagieren zum Beispiel das Kontextmenü oder andere Aktionen (Events) nach dem laden eines Mediums nicht mehr?

03.09.2016 - 19:33 Uhr

Vielen Dank, es funktioniert nun soweit, Proxy und Medium 😁 🙂

Ich hätte noch eine Frage: muss auf dem Ziel-PC VLC installiert sein?

Vielen Dank 🙂

PS: leider bin ich etwas zu ?( aber wie muss das Array für VlcMediaplayerOptions aussehen?
PPS: das Steuerelement scheint ein wenig fehlerhaft zu sein, sobald das Medium geladen wurde, funktionieren die Events nicht mehr 🙁

03.09.2016 - 03:59 Uhr

Vielen Dank für die Info und so 🙂

Ich bin der Anleitung gefolgt, hatte per NuGet ausnahmsweise VLC.DotNet geholt und alles scheint installiert zu sein. Im Projekt ist jetzt auch das VlcControl und wurde eingefügt, aber sobald ich das Projekt starte, nervt VlcLibDirectory und es muss laut Fehlermeldung etwas angegeben werden... Es soll ja nichts lokales wiedergegeben werden sondern vom Netz 😉

Edit
Ich habe ein neues Projekt erstellt, Version 4.5.2 und die 32-Bit von Vlc.DotNet.Forms.2.1.126 eingefügt, da die 64-Bit nicht möchte> Fehlermeldung:

The file '...\net45\x64\Vlc.DotNet.Forms.dll' is not valid.

Beim compilieren erscheint folgendes:

Fehlermeldung:
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Core, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Core.Interops, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Forms, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Wpf, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.

Naja, ist schon etwas spät 😉

01.09.2016 - 23:14 Uhr

Ich danke euch beiden 🙂

Ich meinte, dass der entwickelte Client eine Proxy-Schnittstelle haben sollte und eine Verbindung aufbauen könnte 😉 😁

Leider bin ich in C# nicht so weit 🙁

@Palin
Tjoa, hmm, wenn gar nix hilft, dann eben VPN, darüber müsste ja der gesamte Datenverkehr laufen, also auch das getippselte Programm, was aber nicht der Sinn wäre 🙁

Vielleicht würde es auch reichen, wenn man zur Not halt die Proxy-Daten vom Internet Explorer anzapft damit die gesamte Verbindung im Programm via Proxy geht, immerhin, auch wenn Firefox in einer anderen Sprache geschrieben ist, hat auch eine Schnittstelle 😉 😁

PS: Tut mir Leid dass ich momentan etwas planlos bin... Die Idee im Kopf funktioniert, nur das Umsetzen nicht...

01.09.2016 - 21:47 Uhr

Also bietet C# selber keine Möglichkeit einen Proxy zu verwenden?
Geplant wäre dies hier:
Benutzer stellt Proxy-Daten ein, fehlen diese läuft nix
Alle Verbindungen im erstellten Programm laufen darpber, so könnte hier der Videostream laufen

@Palin
Laut den verlinken Beitrag geht es möglicherweise z.B. vom IE?
Wenn es damit gehen täte, wäre es zu Not ok, aber dennoch wäre es schön, wenn das erstellte Programm eine Verbindung mit dem Proxy aufbauen könnte und darüber den Datenverkehr, hier wären es die Videostreams.

01.09.2016 - 20:35 Uhr

Nun ja, VLC bietet ein ActiveX an, das wollte ich zur Not nehmen... Kann man C# nicht mitteilen, dass das der Link via Proxy aufgerufen wird und dann der Videoinhalt geladen wird? Oder mal anders geragt, gibt es überhaupt brauchbare Steuerelemente in Sachen Video außer den WMP und VLC?

01.09.2016 - 18:53 Uhr

Hallo,
für ein Projekt benötige ich vollständige Unterstützung eines Proxies, da das jeweilige Medium nur in einem bestimmten Land verfügbar ist. Leider finde ich dazu gar nichts 🙁

Das jeweilige Medium (Video) soll im VLC-Control geladen werden ( M3U8 ) (ein anderes Control scheint es im Videobereich nicht zu geben, außer den von Microsoft), aber dazu wird ein Proxy benötigt, wie könnte dies umgesetzt werden?

Über Vorschläge oder Beispiele würde ich mich sehr freuen, vielen Dank 🙂

27.11.2015 - 00:34 Uhr

Und wieso liest Du nicht einfach den Carriername aus?

Ich habe im Netz danach gesucht, aber irgendwie scheint es nichts zu geben. Gibt es dazu Beispiele oder ähnliches?

Ich fand nur das hier:
How to determine the mobile operator for Windows Phone 8
How to determine the mobile operator for Windows Phone 8.1
Beides ist aber nur für's Windows Phone.

26.11.2015 - 20:52 Uhr

Ist ein VPN Tunnel nichts für Dich? Würde die Sache enorm vereinfachen.

Inwiefern? Das Info-Programm soll später für jeden verfügbar sein. Das Programm soll herausfinden, mit welchen Anbieter die Person verbunden ist, primär aus dem Mobilfunk (Deutschland), mehr eigentlich nicht 😉 Nach der Prüfung wird die passende Info-Seite geladen 8)

Falls C# den Hostnamen nicht auflösen kann, muss wohl doch das PHP-Script herhalten 😉 wobei eine Abhängigkeit entsteht 8o 🙁

26.11.2015 - 20:10 Uhr

Und das magst dann für alle derzeit 200 verschiedenen Anbieter machen? [...]

Nein, die ich habe reichen vorerst 😁 , es wäre zwar schön, wenn man auch noch den Hostnamen von E-Plus und einigen Anbietern aus dem deutschen Ländle hätte 🙂 aber das Netz schweigt 🙁

Also .NET kann Dir zwar sagen, obs ne WLAN, Ethernet oder PPoe ist aber meines Wissens nicht, ob Mobil oder nicht. Das liegt an den Sticks, ja.

Daher wäre die Frage, kann man in C# es so handhaben, dass dieser den Hostnamen der aktuellen Verbindung einholt ohne dass die Daten von einem Webspace mit einem gebastelten PHP-Script holt? Es könnte ja mal sein, dass der Webspace nicht erreichbar ist. Es wäre halt schön, wenn es nur in C# laufen würde 🙂

26.11.2015 - 19:13 Uhr

Vielen Dank für eure Hilfe 🙂

Ich bastle in WinForms, es soll geprüft werden, ob eine mobile Verbindung besteht. Windows zeigt ebenfalls an, ob eine Verbindung besteht oder auch nicht. Vielleicht wäre es machbar, den APN zu bekommen, aber ich habe zum Testen einen Stick, welcher HiLink ist und dieser fungiert als normales Netzwerk und zeigt logischerweise keine Infos an, von daher wäre dieses Vorhaben wohl doch nichts.

Könnte man es auch so lösen, dass so gesehen der Hostname der Mobilfunkverbindung abgerufen werden kann? Ich habe zwar per PHP etwas zusammen gestrickt, wo das Script allerdings auf dem eigenen Webspace liegt, aber es wäre schön, wenn man dies unabhängig in C# umsetzen könnte. Leider konnte ich nichts finden, wie der Hostname überhaupt abgerufen werden könnte.

Hier die bisher herausgefundenen Hostnamen:
Telekom:
irgendwas.dip.t-dialin.net (Normales Internet (externer Anbieter))
irgendwas.dip0.t-ipconnect.de (Normales Internet (externer Anbieter))
irgendwas.d1-online.com (Mobilfunk)

Vodafone:
ip-xxx-xxx-xxx-xxx.web.vodafone.de

Allerdings würde demnach nur der hintere Teil wie TLD, Domain benötigt, bei Vodafone müsste dieser Teil weg ip-xxx-xxx-xxx-xxx. Wäre diese Variante machbar?

@Coffeebean
Ja, Dethering alá Mobilfunkverbindung, hat sich aber wohl damit erledigt.

25.11.2015 - 23:51 Uhr

Ich weiß zwar nicht, ob das Thema hier rein passt, dennoch würde ich gerne wissen, ob man z.B. in C# prüfen kann, ob eine Verbindung über Mobilfunk besteht (Stick-Modem/Dethering).

Szenario:
LAN ist aktiv, primäres wird hierüber abgewickelt, auch wenn eine Mobilfunkverbindung besteht.

Eine Anwendung soll nur funktionieren, wenn eine reine Mobilfunkverbindung besteht, da diese bestimmte Informationen einholt, welche per "normalen Internet" nicht eingeholt werden kann.

Vielleicht könnte man mittels verwendeten APN etwas realisieren?

Leider konnte ich nichts brauchbares im Netz in Sachen Cellular/Mobilfunk oder ähnliches finden.

Vielen Dank.

24.11.2015 - 21:18 Uhr

Ich wollte nur mal kurz nachfragen, ob es auch eine Möglichkeit gibt, die Tags von einem Webstream zu lesen? Der Stream ist ebenfalls MP3, TagLib sharp ist schon eingebunden.

Vielen Dank.

24.11.2015 - 02:44 Uhr

Und wie ist der aktuelle Stand?

Eine Frage: baust du nur eine reine Playlist-Abfrage oder auch einen Player ein?
Die URL zum Stream war sehr leicht zu finden 😉 :evil:

Der trackfinder scheint etwas hinterher zu sein, beim Stream werden die Daten normal geladen.

Edit Ich habe mal deinen Code genommen, bei mir wird das Label aktualisiert, GUI ist bisher noch nicht eingefroren. Ich hatte einiges zum Testen versucht, damit die Umlaute korrekt angezeigt werden, aber ohne Ergebnis, liegt das an AngleSharp?
Mit client.Encoding = Encoding.UTF8; klappte es nicht, egal welche Werte eingetragen wurden.

Ich habe mir ein Schnippsel ausgeliehen, damit die Wörter am Anfang groß geschrieben werden 😁

static string UppercaseWords(string value)
        {
            char[] array = value.ToCharArray();
            // Handle the first letter in the string.
            if (array.Length >= 1)
            {
                if (char.IsLower(array[0]))
                {
                    array[0] = char.ToUpper(array[0]);
                }
            }
            // Scan through the letters, checking for spaces.
            // ... Uppercase the lowercase letters following spaces.
            for (int i = 1; i < array.Length; i++)
            {
                if (array[i - 1] == ' ')
                {
                    if (char.IsLower(array[i]))
                    {
                        array[i] = char.ToUpper(array[i]);
                    }
                }
            }
            return new string(array);
        }

/* Aufruf
label.Content = UppercaseWords(artistName + " - " + songName);
\*/
21.11.2015 - 02:55 Uhr

[..] jetzt muss ich nur rausfinden wie ich es automatisch aktualisieren lassen kann. =)

Eventuell per Timer? Zumindest könnte man es erneut laden lassen, vielleicht gibt es aber auch eine bessere Lösung.

        private static void Playlist()
        {
            try
            {
                // Dein Code
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

Code per Playlist(); an jeder benötigten Stelle abrufbar, keine Ahnung ob das hier das gesuchte war.

**:::

20.11.2015 - 00:09 Uhr

Leider muss ich noch mal stören 8o

"Anscheinend" klappt es mit den Zahlen (mit/ohne Komma).

Wie würde man es theoretisch so hin bekommen, dass nur die Größenbezeichnung (KB|MB|GB) alleine stehen täte? Mit den Mustern die ich so getestet habe, hat es irgendwie nicht geklappt. Alles, was z.B. vor MB steht, soll nicht angezeigt werden, da die Zahlenformate "dynamisch" sind (mit/ohne Komma), müsste es doch ein Muster geben, oder nicht?

Gibt es in C# kein global wie im Beitrag von Caveman? Dort wurde als Option global verwendet ?( Hier die leicht veränderte Variante: regex101.com/r/vF0mQ3/1 😉

19.11.2015 - 19:31 Uhr

Das ist XHTML strict, nicht HTML - sofern das Dokument valide ist.
Wenn es das ist, dann funktioniert XDocument.

Laut W3C und anderen Validatoren ist es nicht valide, was man nicht verstehen muss. Wenn man schon striktes XHTML verwendet, sollte man sich eigentlich auch daran halten, sonst bringt es sehr viel 😉

PS: regex101.com scheint interessant zu sein, aber irgendwie bisher ohne Lösung in C# 🙁

Wie ich verstanden habe, wird der Text wie MB mit diesem Muster entfernt:

(:question:KB|MB|GB|TB)

😉

19.11.2015 - 18:10 Uhr

Vielen Dank für eure Anregungen und Hilfen, vertragt euch bitte 🙂

Leider bin ich in dieser Materie Anfänger 🙁
Es gibt bestimmt viele Wege, die Werte aus einer "statischen" HTML herauszufiltern, das was ich in Sachen RegEx fand, erschien mir zuerst als eigentliche Möglichkeit, nur diese scheint nicht die eleganteste Variante zu sein. Ich hatte mich schon ein wenig umgeschaut, wie man die HTML und die entsprechende Inhalte vielleicht herausfischen könnte, bisher leider ohne Erfolg. Leider ist der Zielcode statisch und nicht änderbar, sonst hätte man natürlich den ändern können, was aber ausgeschlossen ist. Der gewünschte HTML-Code enthält insgesamt 3 Zeilen:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Die dritte Zeile enthält den normalen HTML-Code, Klassen sind mehr oder weniger vorhanden, aber auch verschachtelte Tags.

regex101.com schaue ich mir mal an 🙂

18.11.2015 - 23:32 Uhr

Gemacht, aber irgendwie fruchtet es in C# nicht unglücklich

Code + Fehlermeldung?

Es erscheint derzeit komischerweise keine Fehlermeldung mehr, aber sobald das Komma weg ist, wird der gesamte HTML-Code nach MB ausgegeben.

Hier der Abschnitt des Problem-Codes, das Muster hatte ich inzwischen wieder verändert, von daher bitte nicht wundern:

private string _dataVolumeUsedCurrentSizeValue;
/* ... */
const string dataVolumeUsedCurrentValue = "<div class=\"barTextBelow color_default\"><span class=\"colored\">(.+?)\\s*\\D*</span>";

var dataVolumeUsedReg = new Regex(dataVolumeUsedCurrentValue, options);
var dataVolumeUsedM = dataVolumeUsedReg.Match(url); /* Variable */
var dataVolumeUsedNumbers = dataVolumeUsedM.Groups[1].Captures;
foreach (var n in dataVolumeUsedNumbers) { _dataVolumeUsedCurrentSizeValue = n.ToString(); }
/* ... */
labelDataVolumeUsedCurrent.Text = _dataVolumeUsedCurrentSizeValue;

Zahlen mit Nachkommastellen sind mit Regex immer noch eine der leichtesten Übungen, lustig wird es z.B. bei EMail-Adressen.

Mit dieser Materie befasse ich mit eigentlich erst seit ein paar Tagen.

Wie gesagt: Um heraus zu finden, was das Problem ist, brauchen wir Code und Fehlermeldung
Oder Du nutzt den Debugger, damit lässt sich das Problem ist (fast) allen Fällen lösen

Der Debugger wird benutzt, am Anfang erschien auch eine Fehlermeldung, ich nutze try, catch, die Meldung wird dann per MessageBox ausgegeben.
In der Code-Ansicht wird auch nicht gemeckert. Nach dem Starten wird die Ausgabe falsch angezeigt.

C# tut genau das, was Du sagst, nicht mehr und nicht weniger.

Anscheinend auch nicht immer 😉

Los werden kannst nur Du das.
Normalerweise sollten derart riskante Komponenten hinter einer Abstraktionsschicht verborgen werden, damit die tatsächliche Implementierung ausgetauscht werden kann. Hast Du das sauber gemacht, sollte es nicht weiter schwer sein, wenn nicht, wird der Aufwand bedeutend größer sein.
Wenn die Anwendung aber das nächste Update der Website überleben soll, musst Du das machen.

Naja, niemand weiß, inwieweit sich der Code ändern wird, natürlich wäre es gut, wenn man das eindämmen könnte, aber ich bin halb Daueranfänger 😉 🙁

Die MSDN-Doku in Ehren, aber schau dir lieber das Tutorial an, was Abt verlinkt hat, das ist sehr gut. Die MSDN-Doku hat den blöden Nachteil, dass sie vollständig sein und gleichzeitig als Nachschlagewerk dienen muss. Das gibt nicht unbedingt immer ein gutes Tutorial ab.

Naja, die MSDN Dolu war nur mal zum "anschielen", dennoch ist für einen ungeübten RegEx und Konsorten nicht gerade einfach 😉

18.11.2015 - 22:11 Uhr

\d+(❔,\d+)?

Setze eine Klammer drum und fertig.
Was dann davor und danach steht, ist zweitrangig.

Gemacht, aber irgendwie fruchtet es in C# nicht 🙁

Das ändert aber nichts daran, dass Regex die denkbar schlechteste Wahl ist, die Du treffen kannst.

Gerade auch was die Zahlen und Kommata betrifft.

Wenn sich die Website ein kleines bisschen ändert, funktioniert garnichts mehr.

Hatte ich vorher schon "Bekanntschaft" geschlossen.

Das ist bei HTML-Parsern schon ein Risiko, aber da kann man das Problem zumindest ein wenig reduzieren, bei Regex würde jede winzige Änderung sofort einen Zusammenbruch bedeuten.

Kennst du vernünftige Anlaufstellen um Regex loszuwerden? C# macht anscheinend was es will, aber nicht was es eigentlich sollte.

Ich hatte mir die Muster etc. von hier angeschaut und das passende irgendwie daraus zu basteln...
(msdn.microsoft.com/de-de/library/az24scfc(v=vs.110).aspx)

Denk dran, dass das Parsen zwar durchaus legal sein kann - es aber drauf ankommt, was Du danach machst, ob das dann noch legal ist.. (sowohl rechtlich wie auch durch die Regeln des Webseitenanbieters).

Das ist selbstverständlich. Getestet wird der gespeicherte HTML-Code. Es werden nur minimale Daten von einem Mobilfunknetzbetreiber herausgefischt, damit man sich den Datenverbrauch komfortabel (erst mal am PC) anschauen kann, dazu wird in der Regel eine Mobilfunkverbindung benötigt, ein direkter Zugriff via normalen Internet ist eh nicht möglich, personenbezogene Daten sind nicht vorhanden, nur die Datennutzung, Verbrauch, Laufzeit etc., damit man nicht ständig einen Browser nehmen muss und die Daten sich anzuschauen 😉. Von daher werden die Zahlenwerte auch mit und ohne Komma dargestellt und dies bereitet eben Probleme.

18.11.2015 - 21:21 Uhr

Ich hab mir letztens CsQuery angeschaut.
Das finde ich ganz nett, mir war dabei aber am wichtigsten, dass es die CSS-Selektoren von JQuery kann 😄

OK, kannte ich noch nicht 😉

Habe mich etwas schlau gemacht, aber da das Info-Tool theoretisch von der Funktion fast fertig wäre, hängt es vor allem am Regex, das andere auslesen funktioniert soweit 🙂 es hapert nur an den Zahlen (123,45 | 123). Ich suche schon seit einigen Tagen nach einer Lösung.

<span class=\"colored\">\\s*(\\d+[,\\d]+?)\\s*\\D*</span>

funktioniert fast, wenn das Komma fehlt, wird der rechte Teil ebenfalls von der Quelle angezeigt, ist das Komma allerdings vorhanden, dann ist es korrekt 🙂Habe ich um diese Zeit etwas übersehen?

Original sieht in etwa so aus:

<span class="colored">123,45 MB</span> von 5 GB verbraucht</div>

MB und GB können sich ändern, dies wurde aber bereits extra mit Regex berücksichtigt, Zahlen und Text werden getrennt behandelt 😁

18.11.2015 - 20:16 Uhr

Kann es sein, dass Du eine Website parsen willst?

Ja. Ich möchte ein kleines Info-Tool schreiben welches aus einer Seite Werte ausliest. Die Werte landen erst einmal als Variable, die später für die grafische Ausgabe usw. ist.

Ganz ehrlich: Dafür ist Regex die denkbar schlechteste Wahl, die Du treffen kannst.
Nimm lieber einen HTML-Parser. das .NET-Framework liefert da was mit, was auf dem IE basiert. [...] Werde mich mal schlau machen 🙂

[...] Da gibt es keine Ausgabe, da mit ^auf den Zeilenanfang und mit $ auf das Zeilenende verwiesen wird. Deine Zeilen beginnen und enden nicht mit einem Whitespace sondern mit dem span-Tag. OK, danke für die Info 🙂

18.11.2015 - 17:47 Uhr

Vielen Dank für eure Hilfe.

Wenn ich folgendes in RegEx Studio eingebe, funktioniert es mit und ohne Komma, in C# nicht 🤔

**Eingabe mit Komma **:

<span class="colored">123,45 MB</span>

**Eingabe ohne Komma **:

<span class="colored">123 MB</span>

Muster:

<span class="colored">\s*(\d+(:question:,\d+)?)\s*\D*</span></span>

altes Muster:

<span class="colored">\s*(.+?)\s*\D*</span>

Ausgabe:

123,45 bzw. 123

Mit ^\s*(\d+[,\d]+?)\s*$ erscheint leider gar keine Ausgabe, keine Ahnung warum, mit \d+(❔,\d+)? klappt es zwar mit RegEx Studio, aber nicht mit C#, Meldung: Der Text muss kürzer als 64 Zeichen sein; Parameter: Text

Im Programm Regex

<span class="colored">\s*(\d+(:question:,\d+)?)\s*\D*</span>

funktioniert es.

Es müsste nur auf das Muster 123,45 oder auf 123 zusammen geprüft werden (oder-Muster).

Ich steige da leider nicht wirklich durch, da die anderen Regex-Muster, welche in C# woanders eingesetzt wurden, funktionieren (einfache Werte).

18.11.2015 - 00:13 Uhr

Ich kenne mich zwar nicht aus, aber hattest du schon das aktuelleren VS2015 Community getestet?

Ich hatte lediglich mal Probleme mit dem MetroFramework gehabt, irgendwann konnten die Steuerelemente nicht mehr angeklickt werden, daraufhin wurde der Inhalt aus ProjectAssemblies (%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies) gelöscht, danach ging es wieder, dies hat vermutlich mit deinem Problem nichts gemeinsam.

17.11.2015 - 23:30 Uhr

Probier es mal damit:

<span>\\s*(\\d+[,\\d]+?)\\s*</span>  

Vielen Dank für den Schnippsel, aber es erscheint weiterhin der gleiche Fehler 🙁

Sobald das Komma der Quelle weg ist, zack, Fehler.

17.11.2015 - 23:21 Uhr

[...] ich schaue mir die freien Frameworks mal an.

Und schon entschieden?

Gibt es denn inzwischen eine Art Windows 10 GUI?

17.11.2015 - 23:07 Uhr

Hallo,

ich stehe auf dem Schlauch und kenne mich in Sachen Regex nur wenig aus.

Folgendes Szenario:
Quelle gibt Zahlen je nachdem mit und ohne Kommata aus. Wenn die Quelle bei der Zahl ein Komma enthält, funktioniert es, fehlt es, tritt ein Programmfehler auf.

Beispiel

Eingabe:
<span> 123,45 </span>
<span> 123 </span>

Muster:

<span>\\s*(.+?)\\s*\\D</span>

Ausgabe (z.B. TextBox):
123,45 = Regex funktioniert
123 = Regex funktioniert nicht

Gibt es eine Möglichkeit, dass beide Eingaben ausgewertet werden können?

Im Netz fand ich leider dazu nichts 🙁

Vielen Dank 🙂

07.08.2015 - 18:17 Uhr

Vor einiger Zeit war der RC (Community) noch installiert, dieser hatte eine Testdauer von einigen Tagen inklusive Anmeldung. Nach Zwangswechseln zur neueren Version mit Anmeldung steht nichts mehr vom Ablaufdatum.

07.08.2015 - 01:08 Uhr

Hallo,
ich möchte nicht unhöflich sein, aber das Problem konnte noch nicht behoben werden.

Die Werte aus der generierten Form1 werden per Sprachschalter geladen, aber in den übersetzen Resources.resx (Resources.<lang>-<LANG>.resx) werden einfach nicht geladen 🙁

Gibt es einen Grund warum die Werte aus den Sprachdateien Form1 geladen werden und nur die von Resources.<lang>-<LANG>.resx nicht?

Vielen Dank.

04.08.2015 - 22:40 Uhr

Auf welche Elemente greift es denn nicht? Wenn ich es richtig sehe handelt es sich dabei nur um Menü's und Toolbars.

Auf den ersten Blick scheint dies so zu sein.

Bei diesen ist das Grundsätzliche Problem, dass die einzelnen Items keine "Controls" sind bzw. keine Objekte die von "Control" erben und es eben auch keine Controls-Collection gibt sondern nur eine "Items"-Collection.

Also zwei Paar Schuhe?

Könnte dies ebenfalls umgesetzt werden wie es bei Controls wäre?
Ich experimentiere herum, aber leider klappt nichts.

Ich habe deinen Code in mein Projekt eingepflegt, ein Problem gibt es noch, wenn die ComboBox umgeschaltet wird, wird aus der aktuellen Sprache des Betriebssystem die Daten geladen. Beispiel:

BS-Sprache: DE
Resources.resx (Englisch)
Resources.de-DE.resx (Deutsch)

Da die Sprache des Betriebssystem deutsch ist, werden auch die Daten aus Resources.de-DE.resx geladen, wird aber im Programm die Sprache Englisch gewählt, werden aber die Daten aus Resources.resx nicht geladen.

Kurzfassung: die Daten aus den Resources.resx-Dateien werden nur in der Sprache des Betriebssystem geladen und nicht wie in der ComboBox.

Beispiel wäre wenn ein String für einen Button geladen werden würde, englisch: Dark/Light, deutsch: Hell/Dunkel. Die Umschaltfunktion sähe so aus (aus dem Quelltext MetroFramework übernommen, desses Button eher metroTile enthielt keinen Text):

msmMain.Theme = msmMain.Theme == MetroThemeStyle.Light ? MetroThemeStyle.Dark : MetroThemeStyle.Light;
04.08.2015 - 15:46 Uhr

Zusammenfassung für die Leute, die ihre eigenen Ressourcen einbinden möchten, ohne in die Ressourcen vom Designer gelöscht werden würden.

Form1 (wird vom Designer verwaltet)*Form1.resx *Form1.de-DE.resx *Form1.fr-FR.resx

Eigene Ressourcen (manuelle Verwaltung):
Properties (Eigenenschaften)*Resources.resx *Resources.de-DE.resx *Resources.fr-FR.resx

Nehmen wir an, die Hauptsprache ist Englisch-US, alle Grundwerte werden in Form1.resx und Resources.resx abgelegt. Sollte man z.B. gerade die Sprache Deutsch (Deutschland) / German (Germany) im Designer bearbeiten und aus versehen z.B. die Größe einer Textbos verändert haben und die Originaleinstellung wieder bekommen, wird einfach die Datei Form1.de-DE.resx geöffnet und wählt Other (andere), alle hier angezeigten Werte betrifft wie hier nur die deutsche Sprachdatei, wenn die Werte gelöscht werden, greifen die Werte aus Resources.resx, also aus der Originaldatei.

04.08.2015 - 14:42 Uhr

warum sollte der von dir genannte Code von StackOverflow unbrauchbar sein?

OK, unbrauchbar vielleicht nicht, aber nicht ganz elegant oder so.

Wenn du dich ein wenig mit der Programmierung beschäftigst solltest du es eigentlich auf die Reihe bekommen deine Einstellungen geeignet anzufügen.

Ich werde es mal versuchen. Dein Schnippsel war an sich schon besser, aber ich verstehe noch nicht, warum diese nicht auf alle Elemente gegriffen hat. Liegt es wirklich daran, dass die Elemente neu geladen werden müssen?

OK, für das MetroFramework verwende ich kein Menü oder ToolTip, dennoch wäre es interessant gewesen, wenn dein Beispiel auf alle Elemente greifen würde, da es mit dem Schnippsel aus StackOverflow Probleme mit der ComboBox gibt.

03.08.2015 - 17:13 Uhr

Vielen Dank für deine Hilfe 🙂 An sich funktioniert es jetzt, aber leider werden immer noch nicht alle Elemente in der Zielsprache übernommen, wie Überschrift der Form, ToolTip, menuStrip und das leere Test-Label welches den Text aus der Resources.resx bezieht.

Am besten fährst du übrigens, wenn du direkt eine List<CultureInfo> für alle gültigen Sprachen an deine Combobox hängst und nur mit dieser arbeitest statt der String-Zuweisung und String-Prüfung.

Schaue mich diesbezüglich im Netz schon um, gibt dort auch wieder etliche verschiedene Beispiele. Nehmen wir an, wenn eine Liste mit allen gültigen Sprachen erstellt wird, werden nur die Sprachen in der Liste angezeigt, wo die passende Ressourcen-Datei existiert? Mit dem Menü war nur ein Test.

Edit
Im Netz bin ich über folgenden Code gestolpert, der das komplette Formular samt Steuerelementen umkrempelt:

private void mnuCultureEnglish_Click( object sender, EventArgs e ) {
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "en-US" );
Controls.Clear();
InitializeComponent();
}

private void mnuCultureGerman_Click( object sender, EventArgs e ) {
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "de-DE" );
Controls.Clear();
InitializeComponent();
}

Quelle: stackoverflow.com/questions/6661661/how-to-update-window-form-ui-after-setting-currentuiculture/30239583#30239583

Es wäre dennoch schön, wenn es auch mit dem ursprünglichen Schnippsel funktionieren würde 🙂 da das Beispiel für den Einsatz unbrauchbar ist, bezüglich der Settings-Datei.

03.08.2015 - 15:52 Uhr

Vielen Dank inflames2k, aber leider bin ich unwissend dein Beispiel Einzupflegen, wobei ich einiges ausprobiert hatte X(

Hier ein Standard-Beispielcode ohne MetroFramework, wobei die Umsetzung auch damit später im anderen Projekt klappen sollte 🙂

Selbst hierbei verhält sich das Formular nicht anders als im MetroFramework, einige Elemente bleiben in der Sprache des Betriebssystem. Wenn aber z.B. Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); verwendet wird, dann wird das komplette Formular in der eingegebenen Sprache angewandt. Den Code an sich habe ich etwas bearbeitet.

using System;
using System.ComponentModel;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;
using sprachoberflaeche1.Properties;
using static System.Windows.Forms.Application;

namespace sprachoberflaeche1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
            //Thread.CurrentThread.CurrentUICulture = new CultureInfo(SetCultureInfo);
            InitializeComponent();
            LabelResource.Text = Resources.HelloText;
        }

        //private ResourceManager rm = new ResourceManager("sprachoberflaeche1.MainForm", typeof(MainForm).Assembly);

        private void buttonHelloWorld_Click(object sender, EventArgs e)
        {
            Exit();
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            comboBoxLanguage.Items.Add("English");
            comboBoxLanguage.Items.Add("Deutsch");
            comboBoxLanguage.Items.Add("Français");
            //comboBoxLanguage.SelectedIndex = 0;
            comboBoxLanguage.SelectedItem = comboBoxLanguage;

            // Languages
            //comboBoxLanguage.SelectedIndex = Settings.Default.Language;
            comboBoxLanguage.SelectedItem = Settings.Default.Language;
        }

        private void comboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (comboBoxLanguage.SelectedItem.ToString())
            {
                case "English":
                    ChangeLanguage("en-US");
                    break;
                case "Deutsch":
                    ChangeLanguage("de-DE");
                    break;
                case "Français":
                    ChangeLanguage("fr-FR");
                    break;
                default:
                    goto case "English";
            }
        }

        private void englishToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeLanguage("en-US");
            //comboBoxLanguage.SelectedIndex = 0;
            comboBoxLanguage.SelectedItem = "English";
        }

        private void deutschToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeLanguage("de-DE");
            //comboBoxLanguage.SelectedIndex = 1;
            comboBoxLanguage.SelectedItem = "Deutsch";
        }

        private void françaisToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeLanguage("fr-FR");
            //comboBoxLanguage.SelectedIndex = 2;
            comboBoxLanguage.SelectedItem = "Français";
        }

        private void FormWelcome_FormClosing(object sender, FormClosingEventArgs e)
        {
            // Language
            //Settings.Default.Language = comboBoxLanguage.SelectedIndex;
            Settings.Default.Language = comboBoxLanguage.SelectedItem.ToString();

            // Save settings
            Settings.Default.Save();
        }

        private void ChangeLanguage(string lang)
        {
            foreach (Control c in Controls)
            {
                var resources = new ComponentResourceManager(typeof(MainForm));
                resources.ApplyResources(c, c.Name, new CultureInfo(lang));
            }
        }

        private void SetCultureInfo(Control parent, CultureInfo cui)
        {
            foreach (Control c in parent.Controls)
            {
                ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm));
                resources.ApplyResources(c, c.Name, cui);

                if (c.Controls.Count > 0)
                    this.SetCultureInfo(c, cui);
            }
        }

    }
}

Naja, das Ganze könnte natürlich etwas vereinfacht werden, gerade was die Wiederholung der Sprachtexte wie Deutsch betrifft.

Im Anhang ein Beispielprojekt (VS 2015)

03.08.2015 - 00:00 Uhr

Hallo,
ich bin zwar immer noch Anfänger in Sachen C#, dennoch suche ich eine einfache Möglichkeit, ein Formular zwischen verschiedenen Sprachen umzuschalten. Ich hatte zwar einen uralten Code welches einfache Steuerelemente umschalten konnte, aber keine TabControls und andere Elemente umschaltet.

Damit das Komplette Formular in der ausgewählten Sprache erscheint, müsste oberhalb von InitializeComponent(); CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); stehen. Auch damit hatte ich schon experimentiert, aber ich konnte keinen Umschalter bauen, der auch den jeweiligen Wert der CultureInfo.GetCultureInfo geben könnte X(

Es wäre erst einmal egal, ob das Programm neu gestartet werden müsste, schöner wäre es in Live.

Momentan wird das MetroFramework und nicht das aus .NET direkt, verwendet.

Über eine Lösung wäre ich sehr dankbar, da die Sprachdateien existieren 🙂 nur der passende Umschalter nicht, und der Code (Teilstück)

foreach (Control c in Controls)
{
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
resources.ApplyResources(c, c.Name, new CultureInfo(lang));
}

nicht auf Tabs, Menü's (.NET + MetroFramework) reagiert X(

Vielen Dank.

Hinweis: Form1 wird hier nur als Beispiel genannt.

30.07.2015 - 16:13 Uhr

der Autor des Artikels war 2011 das letzte mal im Forum.

Ist eine Weile her.

Daher halte ich es für unwahrscheinlich, dass der Artikel überarbeitet wird, außer du steuerst selbst die gewünschten Änderungen/Ergänzungen bei.

Dafür reicht mein "Wissen" noch nicht aus.

Den wohl letzten verfügbaren Stand des Tutorials von Martin H. findest du unter folgendem Link (allerdings ohne Bilder und Attachment): [...]

Wurde ja dort archiviert.

Was eventuell im Artikel fehlt wäre, wie man Strings oder ähnliches in der jeweiligen Sprachdatei anfügen kann. Wenn man z.B. die Form1.de-DE.resx per Editor einen Wert einfügen möchte, erscheint eine Meldung, dass der manuell eingefügte Wert wieder gelöscht wird. Von daher wäre auch die Frage, wie man eigene Strings in der jeweiligen Sprachdatei verwenden kann, ohne dass diese gelöscht wird.

20.07.2015 - 01:00 Uhr

Auch wenn diese Anleitung bereits veraltet ist, wäre es möglich, diese so aufzubauen, dass während der Laufzeit die Sprache geändert werden kann, beispielsweise mit menuStrip oder ähnlich damit auch nicht geübte diese anwenden können? Es geht vor allem um Windows Forms.

Der Link zum kompakten Tutorial von Martin H. ist nicht mehr verfügbar.

13.07.2015 - 01:14 Uhr

Jeder muss für sich selbst entscheiden welche Sprache für einen in Betracht kommen. Einige Informationen können auch in deutscher Sprache gefunden werden, einige eher in englischer Sprache.

Immerhin stehen bei Stack Overflow auch andere Sprachen in der Area 51 😉

03.07.2015 - 20:53 Uhr

Du lädst vier mal die selbe Datei in jeweils eine neue Stringvariable und kommst selbst schon auf die Idee sie nur einmal zu laden.

Ich werde mich noch einmal daran setzen 🙁

Tip: Wie oft darf man Variablen verwenden?

Mehrmals.

Noch ein Tip: mit XmlDocument oder XmlReader kannst du direkt XML verarbeiten ohne das selbst zusammenzustückeln.

Ich fand ein Beispiel, konforme XML-Dateien waren kein Problem, hierbei handelt es sich nicht direkt um eine XML-Datei, sondern um eine "Mischdatei" welche andere verschiedene Daten enthält und irgendwann kommt ein Abschnitt mit einem gültigen XML-Daten. Die Zieldatei enthält irgendwann den XML welches im Texteditor als Klartext anzeigbar ist.

Edit
Unwissender Weise klappt es nach einem kleinen Umbau 8) jetzt muss ich mir nur noch den Rest zusammen basteln 😉

Die Lösung war, augenscheinlich einfach 8o ob diese konform ist, keine Ahnung.


                StreamReader streamReader = new StreamReader(FileName);
                string READ_TO_END = streamReader.ReadToEnd();

/* <BEISPIEL_1> */
                ICollection<string> matches_BEISPIEL_1 = Regex.Matches(READ_TO_END.Replace(Environment.NewLine, ""), @"\<BEISPIEL_1.*?\>(.*?)\</BEISPIEL_1\>")
                .Cast<Match>()
                .Select(x_BEISPIEL_1 => x_BEISPIEL_1.Groups[1].Value)
                .ToList();
                foreach (string match_PRODUCT_NAME in matches_BEISPIEL_1)
                    textBoxBEISPIEL_1.Text = (match_BEISPIEL_1);
                streamReader_BEISPIEL_1.Close();
                /* </BEISPIEL_1> */

/* <BEISPIEL_2> */
                ICollection<string> matches_BEISPIEL_2 = Regex.Matches(READ_TO_END.Replace(Environment.NewLine, ""), @"\<BEISPIEL_2.*?\>(.*?)\</BEISPIEL_2\>")
                .Cast<Match>()
                .Select(x_BEISPIEL_2 => x_BEISPIEL_2.Groups[1].Value)
                .ToList();
                foreach (string match_PRODUCT_NAME in matches_BEISPIEL_2)
                    textBoxBEISPIEL_2.Text = (match_BEISPIEL_2);
                streamReader_BEISPIEL_2.Close();
                /* </BEISPIEL_2> */

Ob die ganze Sache kompakter gemacht werden könnte, weiß ich noch nicht.

03.07.2015 - 01:18 Uhr

Das Demo zeigt dann wie man mehrere Led Panels an eine ListBox in WP binden und anzeigen kann.

Auch wenn das Projekt älter ist, ich wollte diese in VS 2015 öffnen, wird laut dessen Info nicht unterstützt ?(