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 SeeQuark
Thema: Platzhalter in Strings mit Werten füllen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ansonsten, wenn die Platzhalter mehrmals auftauchen einfach "String aus dem Language File".Relplace("<Platzhalter>", "ausgetauschter Platzhalter) verwenden.
Bei mehreren Replaces in einem string sollte man aber auf einen StringBuilder umsteigen.

Aber zum Lokalisieren würde ich anders vorgehen...

mfg
SeeQuark

Thema: Durch c#-Button eines anderen Programms klicken
Am im Forum: GUI: Windows-Forms

Entweder kannst du das ganz simpel über eine Mausklicksimulation auf einem bestimmten Punkt lösen, oder aber du informierst dich über das UI Automation Framework.
Ein paar Links:

mfg
SeeQuark

Thema: Auf Canvas.Top und Canvas.Left Eigenschaft zugreifen
Am im Forum: GUI: WPF und XAML

Probiere mal die Methoden Canvas.GetLeft und Canvas.GetTop aus.

mfg
SeeQuark

Thema: Button Style
Am im Forum: GUI: WPF und XAML

Du bist in einem WinForms Forum. Aber fragst du etwas über WPF?

Wenn ja: Das Problem könnte die Priorität von Abhängigkeitseigenschaftenwerten sein:

  1. CoerceValueCallback
  2. Animationen
  3. Lokale Werte
  4. Style Trigger
  5. Template Trigger
  6. Style Setter
  7. ...
Der Trigger hat weniger Gewicht wie ein direktes Setzen der Property.
Irgendwo muss der Wert in einer höheren Priorität gesetzt worden sein.

mfg
SeeQuark

Thema: Wie läuft ein C# Programm unter Linux?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von vbprogger
du darfst nur keine Teile von Windows Forms [...] verwenden
Sicher darf man Windows Forms verwenden. Die Anwendung von BerndFfm sieht mir stark nach WinForms aus (Buttons).
Was man nicht verwenden darf ist WPF. Speziell für Linux gibt es auch noch Gtk# im Framework.

mfg
SeeQuark

Thema: Sammlung von Dateitypen, die nicht komprimiert werden können
Am im Forum: Smalltalk

Ausser .7zip gibts auch noch .7z.
Die über Google gefundene Seite kennt .7zip nicht einmal. Dafür .000 und 165 andere: http://www.fileinfo.com/filetypes/compressed.

Allerdings kann man ohne Probleme ein schwach komprimiertes zip-File weiter komprimieren. Bei den anderen Endungen ist es eigentlich das Selbe.
Andere Dateitypen kommen natürlich nicht vor, wie beispielsweise .docx, was ja auch ein .zip-File ist.

Jeder gute Dateityp sollte ja nicht mehr stark komprimierbar sein, darum finde ich deine Idee etwas komisch.

mfg
SeeQuark

Thema: Kommunikation zwischen zwei Forms wärend Laufzeit mit TCP
Am im Forum: Netzwerktechnologien

Zitat
mein einzigstes Problem
Nur so kann man das natürlich nicht beurteilen. Du hast den Code und den Debugger.
Beispielsweise kannst du in der Schleife testweise Thread.Sleep(500); einbauen und schauen, ob die CPU Belastung immer noch so hoch ist.
Wenn ja, dann liegt das Problem woanders.

Auch kannst du den Rythmus von 3 Sekunden (was aber aus meiner Sicht kein Problem darstellen sollte) etwas hochsetzen und schauen was passiert.

Vielleicht verschleuderst du auch einfach die Resourcen: Dispose implementieren und verwenden (IDisposable).
Also: Immer den gleichen Stream verwenden (am einfachsten StreamWriter, der kann schon strings) und am Ende disposen.
Müsste aber keinen grossen Performanzunterschied machen, sondern eher RAM-Probleme.

Wie man generell Tcp-Anwendungen macht, steht ja in meinem Link oben.

mfg
SeeQuark

Thema: Kommunikation zwischen zwei Forms wärend Laufzeit mit TCP
Am im Forum: Netzwerktechnologien

Praktisch alles dazu steht dadrin: [FAQ] Kommunikation von 2 Forms.

Zu deinem Tcp-Problem: Ich habe den Code jetzt nicht angeschaut, aber vielleicht hilft dir eine Beispielsanwendung, die über Tcp fungiert: VersuchsChat.
So überträgt man allerdings normalerweise die Daten zwischen 2 Prozessen, oder zwischen 2 Computern.

mfg
SeeQuark

Thema: Titelleiste, zusätzlichen Text rechtsbündig anzeigen
Am im Forum: GUI: Windows-Forms

Mit den Leerzeichen geht das sicher am Einfachsten. Die Länge des Textes in Pixeln kannst du ja mit MeasureString und Alternativen bestimmen.
Wie du die Schriftart der Titelleiste ausliest, ist eine andere Sache...

Eine andere Lösung wäre, indem du das Zeichnen der Titelleiste selber beeinflusst. Das wäre ein Fall von [Artikel] Custom Window Border für Form's, zwar komplizierter aber etwas schicker (man kann es auf den Pixel genau machen).

mfg
SeeQuark

Thema: [Regex] Zuweisungen filtern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Hauptproblem scheint zu sein, wie du die E-Mail Adresse auslesen kannst.
So wie du denkst geht das beispielsweise mit folgendem Pattern:

(?≤\w+ *= *)[\d\.]+

Normalerweise liest man aber in den Matches die Groups aus.
Wie das geht steht im [Artikel] Regex-Tutorial

In Nützliche Regex-Pattern findet sich ein vordefiniertes Pattern für eine IP-Adresse.
\w+ *= *\b(?<IPAddress>(2([0-4][0-9]|5[0-5])|[01]?[0-9]{1,2})(\.(2([0-4][0-9]|5[0-5])|[01]?[0-9]{1,2})){3})\b
Das wäre dann das Pattern.

mfg
SeeQuark

Thema: Module im laufenden Betrieb laden
Am im Forum: GUI: WPF und XAML

Zitat von Nava
So bindet mal eine DLL ein:
So macht man P/Invoke, bindet also eine unmanaged dll ein
Ausserdem muss der Pfad schon bekannt sein.

Ich dachte da eher an Assembly.Load(path).

mfg
SeeQuark

Thema: Module im laufenden Betrieb laden
Am im Forum: GUI: WPF und XAML

Wenn ich dich richtig verstanden habe nach Plugin?
[QUOTE3=: [FAQ] Eigene Anwendung pluginfähig machen,http://www.mycsharp.de/wbb2/thread.php?threadid=34472]Denkbar wäre eine einfache, eigene Lösung bei der mit Hilfe von Reflection alle DLL Dateien aus einem Plugin-Verzeichnis geladen werden und nach Klassen gesucht wird, die eine bestimmte Schnittstelle implementieren.[/quote3]
Dazu siehe wiederum [Artikel] Reflection und Metaprogrammierung.

Mit WPF direkt hat das ja nichts zu tun.
Habe ich das richtig verstanden?

mfg
SeeQuark

Thema: Enumerator über statische Properties
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Bin zwar nach ErfinderDesRades, aber trotzdem...

Über Reflection geht das ganz sicher. Mit Reflection kann man nicht nur auslesen, sondern auch verändern (Variablen, aber sogar auch Code).

Trotzdem ist es eindeutig nicht besonders ideal dafür Reflection zu verwenden.
Am Einfachsten wäre:

public class Example
{
   // ... dein Code

   public static IEnumerable<Example> GetEnumerable()
   {
      yield return Ex1;
      yield return Ex2;
      yield return Ex3;
      yield return Ex4;
   }
}
foreach geht dann mit Example.GetEnumerable().

Alles als eigene Property zu definieren finde ich allerdings nicht besonders gut.
Vor allem wenn es so ein gewisses Schema hat, sparst du dir Arbeit, wenn du es per Methode bereitstellst: static GetExample(int index) { /* ... */ }.
Ein Array geht zwar auch, aber dann hast du immer die gleiche Referenz, also wenn du eine Instanz veränderst, wird die Standard-Instanz auch mitverändert.

Dann ist auch der Code in GetEnumerable übersichtlicher.

Ohne diese Methode, also nur über einen statischen Typen ist foreach nicht möglich.

mfg
SeeQuark

Thema: Type-Instanz als Generic-<T> verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Implizit steht das schon im Post über mir; es geht nicht.

Zitat von Post vorher
Schlüsselwort dynamic: Methoden werden intern über MethodInfo ausgelesen und aufgerufen
Etwas anderes fällt mir nicht ein, und gibt es IMHO auch nicht. Zu Reflection: [Artikel] Reflection und Metaprogrammierung.

mfg
SeeQuark

Thema: Type-Instanz als Generic-<T> verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Also ich habe das gestestet - und es geht nicht.

Etwas wie

List<object> list = new List<string>(new[] { "Hello", "World" });
ist nicht möglich. Und zwar aus gutem Grund; bei der List<object> könntest du ohne weiteres einen int hinzufügen. Und so einen Fehler zur Laufzeit zu kriegen ist nicht schön.
Implizit verwandeln kann man nur ein IEnumerable<out T>; List<T> bleibt List<T> und IList<T> entsprechend auch.

Trotzdem geht es: Mit dem Schlüsselwort dynamic.

Ein bisschen Code:

static void TestGenericActivator(Type type, params object[] addItems)
{
    // Schlüsselwort dynamic: Methoden werden intern über MethodInfo ausgelesen und aufgerufen -> geht bei passenden addItems
    Console.WriteLine();
    Console.WriteLine("Dynamic List");

    dynamic dynamicList = Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
    foreach (var item in (dynamic[])addItems)
        dynamicList.Add(item);
    foreach (var item in dynamicList)
        Console.WriteLine(item);

    // Cast: eine List<T> (wobei T nicht direkt object) kann man nicht zu einer List<object> casten; normale InvalidCastException
    Console.WriteLine();
    Console.WriteLine("Casted List");

    List<object> castedList = (List<object>)(Activator.CreateInstance(typeof(List<>).MakeGenericType(type)));
    // Hier (Laufzeit-)Exception: System.InvalidCastException was unhandled
    // "Unable to cast object of type 'System.Collections.Generic.List`1[System.String]' to type 'System.Collections.Generic.List`1[System.Object]'."
    
    foreach (var item in addItems)
        castedList.Add(addItems);
    foreach (var item in castedList)
        Console.WriteLine(item);
}
Aufrufe:

TestGenericActivator(typeof(object), 'U', 2);           // Problemlos
TestGenericActivator(typeof(string), "Hello", "World"); // Exception bei Cast
TestGenericActivator(typeof(float), 3, 1, 4, 1);        // Exception bei Cast (alles ints)
TestGenericActivator(typeof(int), "Exception!!!");      // Exception bei beiden Varianten:
// Microsoft.CSharp.RuntimeBinder.RuntimeBinderException was unhandled
// "The best overloaded method match for 'System.Collections.Generic.List<int>.Add(int)'
// has some invalid arguments"
Also: Mit Kovarianz geht auch nicht alles. Nur das, was idiotensicher ist (zu sein scheint).

mfg
SeeQuark

Thema: Erstellen eines Zufallsgenerators in Abhängigkeit des Status
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Erst einmal folgendes: [Hinweis] Wie poste ich richtig? 4, insbesondere 4c. Wälzt nicht eure Aufgaben auf uns ab.

Dennoch ein kleiner Tipp: Du musst jeder Person einen/bzw. mehrere Zahlenwerte zuordnen. Wenn Status=1, dann nur einen, wenn der Status=2, dann halt 2 Zahlenwerte, bei 3, 3, etc.

Was ich an der Aufgabenstellung nicht verstehe ist, dass es am Schluss immer die gleiche Person wird, die abgefragt wird. Sinvoller erscheint mir, dass wenn die Frage richtig beantwortet wurde der Status decrementiert wird.

EDIT: Mir wurde wirklich keine Warnung angezeigt, aber meine Lösung deckt sich so ziemlich mit der von michlG, nur anders formuliert.

mfg
SeeQuark

Thema: Interface mit Konstanten Membern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von AlexanderT
sollten Konstanten nich performance-Vorteile bieten? Minimale klar, aber Vorteile?
Minimale sicher, das ist ja eigentlich klar.
Der Unterschied der: Konstanten werden in den eigentlichen Code mit einkompilliert wie wenn du den Wert ganz normal als Literal geschrieben hättest.
Es wird also nicht zur Laufzeit der Wert gelesen (abgerufen), sondern schon zur Kompillierzeit.
Die Konstante ist auch in anderen Assemblies im IL-Code "hardcoded" und kann zu Problemen führen, wenn du die Konstante plötzlich änderst. Das merkt sie erst, wenn man sie neu kompilliert.
Bei Readonly-Felder passiert das nicht.

Die Geschwindigkeitsvorteile einer Konstante gegenüber einem readonly Field und sogar gegenüber einer Property sind allerdings kaum merklich.
Von dieser Seite sollte das eigentlich egal sein.

mfg
SeeQuark

Thema: Ordner ein anderes Symbol zuweisen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Schau dir mal diesen CodeProject Artikel an: Create Icons for Folders in Windows Explorer, Using C#.

mfg
SeeQuark

Thema: String auf zwei Nachkommastellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das geht natürlich auch, solange die Eingaben gleich bleiben.
Das Problem sind dann zum Beispiel "1.2.3", "123", "hello.world" oder einfach nur ".". Bei manchen tritt sogar eine Exception auf.
Insgesamt, also wenn man solche Sachen berücksichtigt, braucht man so etwas mehr Code, ist aber etwas schneller.

mfg
SeeQuark

Thema: String auf zwei Nachkommastellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Um diese Formatbezeichner zu verwenden, muss es halt eine Zahl sein, und die Text-Property bei einem Label riecht so nach string.

Das einfachste wäre, sie zu parsen:

 decimal number;
if (decimal.TryParse(textSchlittenweg.Text, out number))
   MessageBox.Show(String.Format("{0:F1}", number); // oder was du auch willlst
anstatt decimal kannst du auch double oder float verwenden, hauptsache ist, dass das Objekt mit dem Formatbezeichner "0.0" oder "F1" umgehen kann, was bei einem string nicht der fall ist.

mfg
SeeQuark

Thema: Klassenwrapper basteln
Am im Forum: Rund um die Programmierung

Bei Activator.CreateInstance<T>() (was zwar im Prinzip gleich, aber schicker ist als (T)Activator.CreateInstance(typeof(T))), wird aber eine Exception geworfen, wenn der Typ keinen parameterlosen Konstruktor besitzt.
Daher fände ich


public T Resolve<T>() where T: new() {
    return new T();
}
besser.
Hier wird bei Compile time ein Error produziert.
Allerdings lohnt sich die Methode gar nicht mehr.

mfg
SeeQuark

Thema: TextBox - Enter abfangen - MessageBox anzeigen
Am im Forum: GUI: WPF und XAML

Ich mach das immer so:

<Button ... IsDefault="{Binding IsFocused, ElementName=textBox}"/>
Bei einem Enter wird also schön der Button gedrückt, den du sowieso noch zur Kennzeichnung haben solltest.
Alternativ kannst du IsDefault direkt auf "True" setzen.

Btw.: http://if-schleife.de

mfg
SeeQuark

Thema: [erledigt] Schief gescanntes Dokument "gerade rotieren"
Am im Forum: Grafik und Sound

So wie ich das überflogen habe, wird das schon berechnet (mit EstimateBestShearXFactor bzw. EstimateBestShearXFactor, Kommentar am Anfang der Methode lautet: X Scherung bestimmen).

mfg
SeeQuark

Thema: WPF Designer wird nicht angezeigt!
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Vielleicht hilft dir auch noch dieser Thread: Problem mit xaml-Dateien unter VS 2008 SP1.

mfg
SeeQuark

Thema: [erledigt] Schief gescanntes Dokument "gerade rotieren"
Am im Forum: Grafik und Sound

Noch eine schöne Lösung hier im Forum: Verdrehten Text in Bitmap zurückdrehen

mfg
SeeQuark

Thema: Eine Liste von Interfaces als Parameter.. geht nicht
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von blubbla
Ich kann auch nicht casten:

InitializeImageComboX((List<IImageComboItem>)TaskStates.GetInstance().States);
Und ein IEnumerable<T> ist halt keine List<T>
Da ConvertAll<T> imho die einzige Methode ist, die eine List<T> zurückgibt wird es wohl die einzige Möglichkeit bleiben, solange der Parameter eine List<T> bleibt.
Aber das Problem an sich ist ja momentan ausreichend gut gelöst, so dass man es damit eigentlich beruhen lassen kann.
Zitat
vielleicht ist das Problem, dass mein States kein Cast anbietet?
Cast ist eine Erweiterungsmethode. Mit using System.Linq; müsste sie eigentlich angeboten werden.
Aber du hast dann halt immer noch keine List<T>.

mfg
SeeQuark

Thema: Form per Thread starten, nur wie?
Am im Forum: GUI: Windows-Forms

Imho müsste ein ShowDialog reichen.
Andererseits ist das eine ziemlich schlechte Lösung, da alle Controls (und dazu gehören auch Forms) nur in einem einzigen Thread existieren sollten.

Siehe auch [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

mfg
SeeQuark

Thema: Eine Liste von Interfaces als Parameter.. geht nicht
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Konstrukt ist ein Lambda Ausdruck.
Falls es dich interessiert: [Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co.

Eigentlich ist es nicht einmal nötig. Mit .NET 3.5 geht auch

InitializeImageComboX(TaskStates.GetInstance().States.Cast<IImageComboItem>());
So ist es fast noch schöner...

mfg
SeeQuark

Thema: aus c# erstellte exe funktioniert nur auf dem Entwicklungspc
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Für VS: Dateien als eingebettete Ressourcen nutzen
Für csc: /res:pfad/zum.png

mfg
SeeQuark

Thema: Eine Liste von Interfaces als Parameter.. geht nicht
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von blubbla
Hat jemand eine Idee?
.NET 4 verwenden Da geht das ohne Probleme und auch noch performant.


Aktuell musst musst du trotzdem casten. So etwas wie

InitializeImageComboX(TaskStates.GetInstance().States.ConvertAll<IImageComboItem>(p => p));
müsste gehen.

mfg
SeeQuark