Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von herbivore
Thema: DataGridView mit UserAddedRow Event
Am im Forum: GUI: Windows-Forms

Hallo Noodles,

das DataGridView ist erst mit der 2.0 Beta hinzugekommen, gell? Möglicherweise ist das einer der Bugs, die in Beta-Version enthalten zu sein pflegen.

HTH

herbivore

Thema: Click outside Form
Am im Forum: GUI: Windows-Forms

Hallo DirtDevil,

ich will nicht streiten! Ich denke nur, dass sich die Komplexität des Codes nicht so sehr erhöhen würde, wenn du bei jeder Erzeugung eines Controls noch den EnventHandler hinzufügst. Bei mir besteht die Erzeugung einen Controls (egal ob direkt im Forum oder in irgendwelchen UserControl) immer aus ein mehreren Zeilen, z.B.


ctrlCurr = new PictureBox ();
ctrlCurr.Location = new Point (iX*iWidth, iY*iHeight);
ctrlCurr.Size = new Size (iWidth, iHeight);
((PictureBox)ctrlCurr).Image = bitmTile;
ctrlCurr.BackColor = Color.Green;
ctrlCurr.TabStop = false;
Controls.Add (ctrlCurr);

Wenn da noch die Zeile


ctrlCurr.LostFocus +=new EventHandler(UniversalLostFocus);

hinzukommt, verlängert sich zwar der Code etwas, aber m.E. nicht die Komplexität des Programms.

HTH

herbivore

Thema: Text an den Anfang einer Datei schreiben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo SlEasy,

soweit ich weiß, gibt es keine Möglichkeit (direkt mit den Methoden des Frameworks) in Dateien (egal welche Stelle) etwas einzufügen (nur anfügen geht, wie yahaoo geschrieben hat). Es bleibt also nur, die Datei komplett neu zu schreiben, erst das, was du einfügen willst, und dann den bisherigen Inhalt der Datei, den du dazu vorher auslesen musst. Alternativ kann man den neuen und bisherigen Inhalt auch erst zusammen in eine neue Datei schreiben und erst danach die alte Datei löschen und der neuen Datei anschließend den alten Namen geben.

HTH

herbivore

Thema: Über UNC-Pfad Festplattengröße auslesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo borlando,

wenn das also mit den UNC-Pfaden geht, wie at2oo1 schreibt, und du oder deine Anwendung über Administratorrechte verfügt, dann kannst du die adminsitrativen Freigaben verwenden, die es standardmäßig für jedes Laufwerk gibt. Die Freigabe für das Laufwerk x: auf dem Server server heißt dabei \\server\x$

HTH

herbivore

Thema: Consolenanwendung starten und StdIn + StdErr umleiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo christof.k,

csc 2>&1 | tee out.txt

'2>&1' führt die beiden Stöme stderr (2) und stdout (1) zu einem zusammen, den man mit '| tee' an das GNU shell utility (sh-util) tee weiterleiten kann. 'tee out.txt' scheibt seine Eingabe sowohl auf stdout als auch in die Datei out.txt. Es sollte verschiedene Stellen im Netz geben, von denen man die sh-util als Windows-Port bekommt. Ein der besten ist wohl die native Win32-Portierung "GNU utilities for Win32" unter http://unxutils.sourceforge.net/

HTH

Frank

Thema: Form minimieren
Am im Forum: GUI: Windows-Forms

Hallo olivier,

sowas kann schon mal vorkommen, aber es sah wirklich wie nicht gesucht aus. Ich hab's sofort gefunden. Im Index 'Minimize' eingegeben, auf Form.MinimizeBox geglickt und dort steht: "Hinweis: Beim Minimieren eines Formulars zur Laufzeit wird ein Resize-Ereignis generiert."

herbivore

Thema: Form minimieren
Am im Forum: GUI: Windows-Forms

Hallo olivier,

ich hoffe das klingt jetzt nicht zu böse: In der Doku!

HTH

herbivore

Thema: Click outside Form
Am im Forum: GUI: Windows-Forms

Hallo Bart,

ja, ich habe mich auch schon gefragt, warum "der Quelltext [dadurch] enorm unübersichtlich werden" würde.

Zu Deinem Problem der "globale" Mausevents:

Ich habe zwar - wie gesagt - keine fertige Lösung, aber ich denke, dass bei einer Lösung die auf true gesetzte Eigenschaft Control.Capture (hier dann Form.Capture) eine Rolle spielen wird.

HTH

herbivore

Thema: FolderBrowserDialog ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Deletemaster,

das Programm gibt es schon:

In der Eingabeaufforderung eingeben:

dir /s /b G:\Archiv\*.mp3 > mp3liste.txt

HTH

herbvore

Thema: Sockets: abgehenden Port bei Send festlegen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Joltan,

ohne mich mit UDP wirklich auszukennen, ist mir folgendes ins Auge gesprungen:

protected Socket UdpClient.Client {get; set;}

Aus der Beschreibung: "Verwenden Sie den zugrunde liegenden Socket, der vom Client zurückgegeben wurde, wenn Sie mehr als den vom UdpClient bereitgestellten Zugriff benötigen." und "Use the Socket returned by Client to set an option that is not available using UdpClient."

Die Eigenschaft ist zwar protected, aber das ist ja keinen wirkliche Klippe.

HTH

herbivore

Thema: Click outside Form
Am im Forum: GUI: Windows-Forms

Hallo DirtDevil,

Zitat
Möglich, dass Das eine Lösung ist. Leider konnte ich im Netz keine Informationen dazu finden, die mir auf die Sprünge helfen...

Ich habe schon öfter gelesen, dass auf nicht vorhandene Doku verwiesen wird. Das wundert mich, weil ihr doch alle das .NET-Framework-SDK installiert haben müsst, oder?. Und da ist doch die sehr gute '.NET Framework SDK-Dokumentation' dabei. Aus der stammen folgende Infos:

Control.Capture-Eigenschaft

Ruft einen Wert ab, der angibt, ob die Maus vom Steuerelement erfasst wurde, oder legt diesen fest.

public bool Capture {get; set;}

Eigenschaftenwert
true, wenn die Maus vom Steuerelement erfasst wurde, andernfalls false.

Hinweise
Wenn die Maus vom Steuerelement erfasst wurde, erhält dieses eine Mauseingabe, unabhängig davon, ob der Cursor sich innerhalb der Begrenzungen des Steuerelements befindet. Die Maus wird i. d. R. nur während eines Ziehvorgangs erfasst.

Nur das Vordergrundfenster kann die Maus erfassen. Wenn ein Hintergrundfenster dies versucht, erhält das Fenster nur Meldungen für Mausereignisse, die eintreten, wenn der Mauszeiger sich im sichtbaren Bereich des Fensters befindet. Außerdem kann der Benutzer auf ein anderes Fenster klicken und es so zum Vordergrundfenster machen, selbst wenn das Vordergrundfenster die Maus erfasst hat,

Wenn die Maus erfasst wurde, funktionieren die Tastenkombinationen nicht.

.NET Framework-Sicherheit:

UIPermission für alle Fenster, um diesen Eigenschaftenwert festzulegen. Zugeordnete Enumeration: UIPermissionWindow.AllWindows
Zitat
Ja, genau diese Idee hatte ich ja auch schon. Dabei kann man ja eigentlich auch nichts falsch machen: Form im Designer auswählen -> unter Eigenschaften LostFocus-Event hinzufügen -> entsprechenden Code hinzufügen... Aber es hat nicht funktioniert!

Das kann daran liegen, dass nicht das Formular selbst, sondern die enthaltenen Controls den Fokus haben. Im Zweifel muss man wohl LostFocus von allen Controls berücksichtigen (und Fokuswechsel innerhalb der Form aussortieren).

HTH

herbivore

Thema: Click outside Form
Am im Forum: GUI: Windows-Forms

Hallo DirtDevil,

ich habe keine fertige Lösung, aber ich denke, dass bei einer Lösung die auf true gesetzte Eigenschaft Control.Capture (hier dann Form.Capture) eine Rolle spielen wird.

HTH

herbivore

Thema: Welche Textbox hat den Fokus?
Am im Forum: GUI: Windows-Forms

Hallo NoOneKnows,

Zitat
Du wirst nirgends mehr erfahren, welches Control zuletzt den Fokus hatte.

nun ja, immerhin kann man auf die Control.GotFocus (und ggf. LostFocus) Ereignisse reagieren und so selbst mitrechnen welches Control, wann den Fokus hatte. Selbst eine lückenlose Fokuswechsel-Historie seit Programmstart ist so möglich.

herbivore

Thema: Pixelinformationen auslesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Hitman II,

mit Bitmap.GetPixel.

Ma könnte meinen, du hättest nicht in die Doku geguckt.

herbivore

Thema: Programm Accessable bei Ausführung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Maddinel,

sieht nicht so aus, als ob in WebClient irgendwas zum Aktualsieren eine Statusbar vorgesehen ist.

Das blockieren der Anwendung verhinderst du dadurch, dass du den Download-Code in einen Thread auslagerst. Wie das geht, ist in diesem Forum bestimmt schon an anderer Stelle beschrieben.

HTH

herbivore

Thema: Bildschirmbreite und -hoehe
Am im Forum: GUI: Windows-Forms

Hallo _void,

die Verwirrung kommt wahrscheinlich daher, dass es mehr als einen Bildschirm an einem Rechner geben kann. Deshalb musst du die mit Screen.AllScreens erstmal Zugriff auf die angeschlossenen Bildschrime holen, auch wenn du selbst nur einen hast. Über das eine Screen-Objekt kannst Du dann auf die gewünschten Infos zugreifen, vereinfacht so:


Screen [] screens = Screen.AllScreens;
screens [0].Bounds.Width;
screens [0].Bounds.Height;

HTH

herbivore

Thema: Grundsätzliche Fragen zu Regex
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

es ist schon richtig, dass "Ein regulärer Ausdruck [...] keine 'Sätze' einer Sprache verifizieren [kann], die beliebig tief geschachtelte Blöcke erlaubt.", aber natürlich kann man ein C# Programm schreiben, dass dies unter Verwendung von RE tut. Das was RE nicht leisten (können), muss in die restliche Programmlogik gesteckt werden.

herbivore

Thema: Zufallszahlen, die sich nicht wiederholen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Pulpapex,

ich glaube die Diskussion entgleitet uns hier etwas. Du hast natürlich recht mit dem Aufwand durch das Löschen (wobei ich nicht so weit gehen würde, dass man nicht löschen darf, denn gehen tut das ja), aber in der Originalfrage ging es um eine "Größenordnung [von] 300 bis 500".

herbivore

Thema: Zufallszahlen, die sich nicht wiederholen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo swordfish,

wenn Du mit 'bei der arraylist' meinen Vorschlag meinst, dann kommt deshalb kein Wert doppelt vor, weil jedes verwendete Element aus der ArrayList entfernt wird.

herbivore

Thema: Suche InheritsFrom Eigenschaft
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo HartlBe,

du solltest überlegen, ob du eine Typabfrage wirklich brauchst. Normalerweise benutzt man ja gerade virtuelle Methoden, um auf den jeweiligen Typ passend reagieren zu können.

Natürlich gibt es Gründe den Typ eines Objekts zur Laufzeit zu ermitteln, aber alleine die Tatsache, dass das - zumindest in der ursprünglichen - C++-Sprachdefinition so eine Möglichkeit nicht gibt, zeigt, dass es normalerweise auch ohne geht.

HTH

herbivore

Thema: System.IO.IOException
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Massaka,

hier scheint der Fehler genau das zu sein, was die Fehlermeldung sagt,

Zitat
er Prozess kann nicht auf die Datei "C:\Dokumente und Einstellungen\user\Eigene Dateien\Eigene Bilder\blub.jpg" zugreifen, da sie von einem anderen Prozess verwendet wird.

wobei die Betonung auf 'von einem anderen Prozess verwendet' liegt. Ich denke die Datei war von einem anderen Programm (zum Schreiben) geöffnet. Wenn Du das Programm mittlerweile geschlossen hast, tritt der Fehler natürlich nicht mehr auf. Ich denke alles was man das tun kann, ist die Exception abzufangen und eine nettere Fehlermeldung auszugeben.

HTH

herbivore

Thema: Vierten Button in Titelleiste
Am im Forum: GUI: Windows-Forms

Hallo Fabian,

zum Anzeigen bzw. Verstecken der Titlebar-Buttons gibt es die boolschen Eigenschaften Form.MinimizeBox, Form.MaximizeBox und Form.HelpButton. Der Schließen-Button wird (wohl) immer angezeigt. Daraus, dass es keine weiteren Eigenschaft für solche Button gibt, schließe ich, dass es keinen direkten Weg gibt, einen weiteren Button anzuzeigen. Dass sowas gehen muss, zeigt Hardcopy, auch wenn dabei der Button nicht das tut, was du beschreibst, aber ich denke, dass der per Win32 realisiert ist.

Die Funktion, die du beschreibst, kenne ich sowieso anderes realisiert: In einigen Programmen gibt es einen Optionsdialog, wo man einstellen kann, ob der MinmizeButton in die Taskleise oder in den System-Tray minimiert.

HTH

herbivore

PS: Bin gerade noch auf ControlPaint.DrawCaptionButton gestoßen. Vielleicht führt das weiter.

Thema: Datei Komprimierung.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Adler,

Daten werden dadurch kompakt gespeichert, dass man Redundanzen vermeidet (also das überflüssige Speichern von doppelten oder berechenbaren Informationen), ungüstige Repräsentationen vermeidet (also eine Zahl nicht als String/Ziffernfolge speichert) und überflüssige "Füllzeichen/-bytes" vermeidet (also wenn man Zahlen, im Bereich von 0-100 als int (also 4 Bytes) speichert, obwohl ein Byte reicht). Dadurch kriegt kann man schon ganz schön was eindampfen.

Aber trotzdem können die Daten anschließend immer noch mit ZIP o.ä. gepackt werden und ich sehe hierfür meistens trotzdem noch das Potential einer weiteren Halbierung der Dateigröße.

Neuere Dateiformate verwenden sogar häufig ein speichermäßig ungüstiges, aber dafür leicht zu verarbeitendes Format, sprich XML, das aber standardmäßig gezipped wird. Statt also Hirnschmalz in eine kompakte Speicherung zu machen, macht man es sich leicht, weil das im Ergebnis normalerweise zufriedenstellen ist.

HTH

herbivore

Thema: Grundsätzliche Fragen zu Regex
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Fabian,

ein bisschen habe ich ja schon hier geschrieben:

http://mycsharp.de/wbb2/thread.php?threadid=4311#post17782

Ansonsten ist der Hauptvorteil die größere Flexibilität, insbesondere, wenn man ein Eingabedaten hat, wo die einzelnen Bestandteile unterschiedliche Längen haben und Datenfelder optional sein können. Den größten Nutzen hat man, wenn man Informationen extrahieren oder aufbereiten will, z.B. alle URLs aus einer HTML-Datei heraussuchen oder ein Doku-Format in anderes überführen.

Außerdem, wenn man RexEx einmal gelernt hat, nicht nur in nicht nur in C# benutzen, sondern z.B. auch in anderen Programmiersprachen, in Editoren, als Parameter von (UNIX-)Kommandos.

Metazeichen sind z.b. sowas wie
. was für ein beliebiges Zeichen steht
\d was für eine Ziffer steht
\s was für ein White Space steht (Leerzeichen, Tab, Newline)

Quantifizierter geben an, wie oft ein Zeichen oder eine Zeichenfolge wiederholt wird

+ bedeutet beliebig oft, mindestens einmal
* bedeutet beliegig oft, einschließlich null-mal
{n,m} mindestens n-mal, höchstens m-mal

Greedy, also gierig, bedeutet, dass bei der Verwendung von Quantifizieren, der RegEx-Algorithmus immer versucht, die längstmögliche Wiederholung zu benutzen. Also, wenn drei Ziffern hintereinander stehen, dann werden für \d+ auch die drei Ziffern verwendet und nicht etwa nur zwei.

Wenn Du mehr wissen willst, frag einfach.

HTH

herbivore

Thema: Datei Komprimierung.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Adler,

bitte etwas genauer: Was sind das für Daten, die Du komprimieren willst? Oder meinst Du gar nicht Datenkompression sondern einfach nur das Speichern als Binärdaten? Weitere Infos wären hilfreich!

herbivore

Thema: OnPaint gezielt überschreiben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo KRambo,

wenn man in der TextBox nichts markieren kann, sollte Sie auch so aussehen, als ob man nichts markieren kann. Du solltest die Farbe also so lassen, wie sie bei disabled eben ist.

Wenn Du die Farbe unbedingt so haben willst, wie ohne Enabled ist, geht das so:


TextBox tb = new TextBox ();
Color clr = tb.BackColor;
tb.Enabled = false;
tb.BackColor = clr;

HTH

herbivore

Thema: OnPaint gezielt überschreiben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo KRambo,

Du musst nicht OnPaint überschreiben, sondern einen PaintEventHandler in das Control.Paint-Ereignis eintragen. In diesen PaintEventHandler schreibst du dann den Code, den du jetzt in OnPaint stehen hast.

Das Control.Paint-Ereignis tritt ein, wenn das Steuerelement neu gezeichnet wird, wogegen OnPaint das Paint-Ereignis auslöst (was du aber nicht brauchst, weil das Windows für Dich macht; Sollte es nötig sein, das Zeichnen doch manuell anzustoßen, dann ist sowieso Control.Invalidate das Mittel der Wahl. OnPaint braucht man, wie ich das sehe, nie).

HTH

herbivore

Thema: JPEG-Dateigröße beeinflussen?!
Am im Forum: GUI: Windows-Forms

Hallo -acid-,

fangen wir mal hinten an:

Das Bild soll gespeichert werden:


NewImage.Save(Path + "\\" + Folder[3] + "\\" + File, myImageCodecInfo, myEncoderParameters);

Nun gibt es ja viele Bildformate wie BMP, JPG, GIF, PNG und noch viele mehr. Also muss man dem Bild (Image) sagen, in welchem Format es gespeichert werden soll. Das passiert mit der ImageCodecInfo.


myImageCodecInfo = GetEncoderInfo("image/jpeg");

Zu jedem Bildformat, gibt es eine Reihe von Unterformaten, im einfachsten Fall ist das für eine BMP eine Unterscheidung nach Anzahl der Bits pro Pixel (z.b. 1Bit = 2 Farben, 4Bit = 16 Farben, 8Bit = 256 Farben, 16Bit = 65536 Farben, 24Bit = 16 Mio Farben), bei GIFs z.B. statische oder animierte Bilder und bei JPEG z.B. die Kompressionsrate (das ist nicht 100% präzise, aber ich denke, es hilft dem Verständnis). JPEGs kann man z.B. auch noch im progressiven Format speichern, dann wird beim Laden über langsame Verbindungen im Browser zuerst eine unscharfe Version angezeigt, die langsam immer schärfer wird. Klar das die Daten in einer anderen Reihenfolge (in einem anderen Unterformat) gespeichert werden müssen, als in einem "normalen" JPEG, das sich von oben nach unten aufbaut.

Diese Informationen werden über myEncoderParameters zur Verfügung gestellt. Dabei ist


EncoderParameters myEncoderParameters = new EncoderParameters(1);

nichts weiter als ein Array, dass in diesem Fall nur 1 Element enthält. Aber nach dem oben gesagten könnten weitere Informationen notwendig werden, z.B. wenn man das JPEG auch noch progressiv speichern möchte. Dann bräuchte man entsprechend mehr Array-Elemente.

Dir geht es aber hier nur um die Qualität, also muss die Qualität dem Speicheralgorithmus als EncoderParameter übergeben werden,


Encoder myEncoder = Encoder.Quality;
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);

was klarer (und kürzer) wird, wenn man gleich schreibt:


EncoderParameter myEncoderParameter = new EncoderParameter(Encoder.Quality, 50L);

Jetzt haben wir einen Parameter, der sagt, das die Qualität (Encoder.Quality) fünfzig (50L) betragen soll.

Nun müssen wird den Parameter noch in das EncoderParameters-Array packen


myEncoderParameters.Param[0] = myEncoderParameter;

und schon kann man die Parameter (myEncoderParameter) an die Save-Methode übergeben (s.o.), die damit jetzt alle Informationen hat, um das Bild im gewünschten Format speichern zu können.

HTH

herbivore

Thema: unbekannte Anzahl Parameter...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo yngwie,

ich würde gerne noch RegularExpressions in den Raum werfen. Im Kern geht es bei den RE darum festzustellen, ob ein bestimmter Text (z.B. eine Eingabe) auf ein bestimmtes Muster passt (also z.B. dem Format einer E-Mail-Adresse entspricht).

RE leisten aber noch viel mehr, insbesondere kann man sie gut benutzen, um einzelne Bestandteile aus einer Eingabe zu extrahieren.

Ein Beispiel:


using System;
using System.Text.RegularExpressions;

public static int Main (string [] astrArg)
{
   // Das Muster, auf das die Eingabe passen soll (Zahl und Wort, getrennt durch Leerzeichen)
   Regex reBsp = new Regex (@"(\\d+)\\s+([a-z0-9_]+)$", RegexOptions.IgnoreCase);
   // Test durchführen
   Match mBsp = reBsp.Match("123 abc");
   // Passt das Muster auf die Eingabe?
   if (mBsp.Success) {
      // Ja, es passt, dann holen wir uns die Bestandteile (Zahl und Wort)
      int    iZahl   = Convert.ToInt32 (mBsp.Groups [1].ToString ());
      String strWort = mBsp.Groups [2].ToString ();
      // Und geben sie aus
      Console.WriteLine("Inhalt der ersten Klammer: " + iZahl);
      Console.WriteLine("Inhalt der ersten Klammer: " + strWort);
   } else {
      // ggf. weitere Eingabeformate behanden oder Fehler behanden
      // oder inorieren
   }
}

Dabei wird eine Eingabe (hier der Einfachheit habler fest "123 abc"; sonst mit ReadLine o.ä. einlesen) darauf geprüft, ob sie sofort am Zeilenbegin '^' mit einer Ziffer '\d' beginnt, der weitere Ziffern folgen '\d+' ('+' bedeutet eine Folge von 1 oder mehr des angegebenen Zeichens), wobei diese Folge gemerkt werden soll '(\d+)'. Anschließend muss mindestens ein Leerzeichen (genauer White Space) folgen '\s+' und dann ein Wort bestehend aus Kleinbuchstaben 'a-z', wegen RegexOptions.IgnoreCase auch den entsprechenden Großbuchstaben, Ziffern '0-9' und/oder dem Unterstrich '_', also zusammen die Zeichen '[a-z0-9_]', die als Folge '[a-z0-9_]+' gemerkt werden soll '([a-z0-9_]+)'. Das Wort muss bis zum Zeilenende '$' gehen.

Auf die gemerkten, in Kammern stehenden Teile kann man über mBsp.Groups zugreifen, wobei i für die i-te Klammer im Muster steht.

Sicher muss man sich etwas mit den RE beschäftigen, aber wenn man die einmal drauf hat, hat man ein universelles, leistungsfähiges (String-)Analyse- und Bearbeitungswerkzeug an der Hand.

Wenn man sich so eine RE zum ersten Mal anguckt, sieht die sicher ziemlich krank aus, aber das Schreiben einer RE ist ziemlich einfach, weil man von links nach rechts einfach hinscheibt, was man an Eingabezeichen erwartet. Man muss also nicht den ganzen Ausdruck auf einmal entwerfen, sondern man schreibt die RE schrittweise von links nach rechts, wobei es reicht immer nur der aktuellen Position seine Aufmerksamkeit zu schenken.

Zum Thema Bearbeitungswerkzeug hier noch ein Beispiel aus der .NET-Doku, das einen Datumsstring von einem Format in ein anderes umwandelt:


static String MDYToDMY (String input)
{
   return Regex.Replace(input,
            "\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b",
            "${day}.${month}.${year}");
}

HTH

herbivore

Thema: TreeNodeCollection zwischen 2 TreeView überführen
Am im Forum: GUI: Windows-Forms

Hallo yesso,

wenn Dein Problem noch besteht, dann poste doch mal Code (möglichst kurz und nur die problematischen Stellen, aber ohne Änderungen direkt compilierbar). Ich würde dann mal schauen.

herbivore