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 MarsStein
Thema: Unterschied zwischen "new MyClass()" und "private static MyClass ..."
Am im Forum: Grundlagen von C#

Hallo,

Zitat von Abt
Es kann auch darauf zugegriffen werden, wenn keine Instanz der Variable existiert.
Das ist jetzt aber etwas missverständlich ausgedrückt.

Es kann auf die static Variable zugegriffen werden, ohne eine Instanz der Klasse zu erzeugen, in der sie deklariert wurde.
Eine Instanz des SerialPort braucht man aber natürlich trotzdem, und diese muss auch irgendwann mit new erzeugt und der Variablen zugewiesen werden.

Gruß, MarsStein

Thema: Unterschied zwischen "new MyClass()" und "private static MyClass ..."
Am im Forum: Grundlagen von C#

Hallo,

zum besseren Verständis am besten die Doku bemühen: C# Keywords

Von dort aus kommst Du auch auf ausführlichere Erklärungen zu den Schlüsselwörtern.

Gruß, MarsStein

Thema: [erledigt] Befehle per Socket an Roboter
Am im Forum: Netzwerktechnologien

Hallo,

vergleich mal die beiden move-Strings in Python und C#:

"movel(p[0.25,-0.5,0.6,0,0,0], a=1, v=0.5)"+"\n"
"movelj(p[0.25, -0.5, 0.6, 0, 0, 0], a = 1, v = 0.5)" + "\n"
Die ganzen zusätzlichen Leerzeichen im C#-String halte ich für einen ein echten Grund.
Außerdem hast Du eimal movel(...) und einmal movelj(...). Ob das trotzdem ein gültiger Befehl ist, kann ich nicht beurteilen.

Gruß, MarsStein

Thema: Bundesagentur stoppt millionenschweres IT-Projekt
Am im Forum: Smalltalk

Hallo,

Zitat von Palin
An dem Punkt, auch wenn ich schon wider spekuliere. (Ich hab mir halt weiter um das Problem Gedanken gemacht.)
Halte ich es für möglich, das sie die KTN als ID in der Datenbank verwendet haben und dann auch als Fremdschlüssel in anderen Tabellen. (Was wir bei uns mit dem Barcode nicht haben. Nach „außen ist er zwar die ID“, intern hat die Tabelle aber eine eigene ID. So das ich den Barcode einfach ändern kann).

Dann spekuliere ich jetzt mal, dass das etwas zu kurz gedacht ist. Vor allem folgender Aspekt wird dabei nicht berücksichtigt:
Zitat von Artikel
Das Projekt, das auf einer einzigen Plattform 14 verschiedene Anwendungen bündeln sollte,

Stell Dir also vor, Du hast 14 verschiedene Anwendungen, jede hat Ihre eigene Datenbank und funktioniert im Standalone-Betrieb so wie sie soll. Einige teilen sich vielleicht schon gewisse Datenbereiche, andere wiederum nicht.
Dann hast Du nicht nur das Problem, dass Du mit verschiedenen Schlüsseln hantierst, sondern das ganze über verschiedene DBs von verschiedenen Anwendungen die voneinander erstmal nix wissen. Diese in Einklang zu bringen (ich mutmaße hier auch nur) ist wahrscheinlich einer der Hauptpunkte des verworfenen Projekts gewesen.
Dann bist Du zusätzlich davon abhängig, wie diese ganzen Systeme die Daten verarbeiten und was sie können oder auch nicht können.
Und dann ist man ganz schnell da, dass es wirklich sehr komplex werden kann.

Warum allerdings gerade bei der Kontonummer scheinbar von vorneherein angenommen wurde, dass eine Änderung ein sehr selten auftretender Ausnahmefall ist - was ja im speziellen Fall der Kontonummer erst zu dem Desaster geführt hat, kann ich persönlich auch nicht nachvollziehen.

Gruß, MarsStein

Thema: Datatable mit DateTime nach Uhrzeit filtern - Welchen Select absetzen?
Am im Forum: Datentechnologien

Hallo,

Zitat
mit ≥17 and ≤06:00
dürfte es gar nicht geben. Meinst Du "or" statt "and"?

Zur Frage: Mach doch die Abfrage über Linq statt über SQL und benutze dann in der betreffenden Spalte DateTime.TimeOfDay zum abfragen.
Also in der Art (ungetestet):

dtClone.Rows.Where(dr => 
{
    TimeSpan time = ((DateTime)dr["dateTimeMEZ"]).TimeOfDay;
    return (time ≥ new TimeSpan(17, 0, 0)) || (time ≤ new TimeSpan(6, 0, 0));
})

Gruß, MarsStein

Thema: Generischer Singleton erstellt keine unterschiedlichen Instanzen je nach Typ
Am im Forum: Rund um die Programmierung

Hallo,

also die Klasse aus dem Ursprungspost funktioniert (ich habe nur die Ausgabefunktion geändert, um die Typen zu sehen):

    class Base
    {
    }

    class Derived1 : Base
    {
    }

    class Derived2 : Base
    {
    }

    class Singleton<T> where T : Base
    {
        protected T entityType;

        protected static Singleton<T> instance;

        protected Singleton(T value)
        {
            entityType = value;
        }

        public static Singleton<T> Instance(T value)
        {
            if (instance == null)
            {
                Console.WriteLine("instance == null");
                instance = new Singleton<T>(value);
            }

            PrintValue();

            return instance;
        }

        static void PrintValue()
        {
            Console.WriteLine(typeof(T).FullName);
            Console.WriteLine(instance.entityType.GetType().FullName);
        }

    }

Wenn ich das ganze so benutze, erhalte ich die gewünschte Ausgabe

class Prog 
    {
            static void Main()
            {
                // Singleton<Derived1> für Aufruf und Derived1 als Parameter
                Singleton<Derived1>.Instance(new Derived1());

                // Singleton<Derived2> für Aufruf und Derived2 Parameter
                Singleton<Derived2>.Instance(new Derived2());

                Console.ReadLine();
            }
    }
liefert
instance == null
ConsoleApplication1.Derived1
ConsoleApplication1.Derived1
instance == null
ConsoleApplication1.Derived2
ConsoleApplication1.Derived2


Den beschriebenen Effekt kann ich aber auch erzeugen, indem ich die Klasse anders (und in dem Fall falsch) benutze:

            static void Main()
            {
                // Singleton<Base> für Aufruf und Derived1 als Parameter
                Singleton<Base>.Instance(new Derived1());

                // Singleton<Base> für Aufruf und Derived2 als Parameter
                Singleton<Base>.Instance(new Derived2());

                Console.ReadLine();
            }
Dann erhalte ich das beschriebene Verhalten in der Ausgabe:
instance == null
ConsoleApplication1.Base
ConsoleApplication1.Derived1
ConsoleApplication1.Base
ConsoleApplication1.Derived1

Ich vermute also, dass Du versuchst, die Typisierung nur durch den Parameter zu machen, die Singleton-Klasse selbst aber mit der Basisklasse benutzt. Dass das nicht funktionieren kann, ist aber logisch.

Gruß, MarsStein

Thema: [WPF] Frame Pages Seite im Ordner wird nicht angezeigt
Am im Forum: Grundlagen von C#

Hallo,

MainWindow mainwindow = new MainWindow();
Du erstellst also aus Deinem privatkunden_show heraus eine neue(!) Instanz des Hauptfensters und machst dann was damit -> diese neue Hauptfenster wird aber nie angezeigt.

Das dann im vorhandenen Fenster nix passiert, ist wohl klar.

Gruß, MarsStein

Thema: Linq dynamisches Ergebnis als Parameter an Methode übergeben
Am im Forum: Datentechnologien

Hallo,

solange Du mit anonymen Typen arbeitest (new { z[0], z[2] }) geht das nur, wenn Du das Ergebnis als dynamic übergibst.
Oder Du erstellst einen eigenen Typen, dann ist das Ergebnis einfach ein IEnumerable<DeinSchönerTyp>, und kann auch so übergeben werden.

Gruß, MarsStein

Thema: GELÖST: Array+Task+ Lambda: Task[] tasks = new Task[] { lambda1,lambda2, ... }; klappt nicht
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Warum nicht bei einem Array wie oben? Es wird doch normal pro Element der Konstruktor Task (Action Action) aufgerufen oder läuft es bei einer Array-Initialisierung anders?
Offensichtlich. Warum sollte er den Konstruktor für Task ausführen? Du erstellst ein Array mit Tasks, dann musst Du auch Tasks reinstecken - oder zumindest einen Typen, der eine implizite Konvertierung zu Task aufweist.

Gruß, MarsStein

Thema: Prüfen ob ein Ordner erstellt, gelöscht, ... wurde. Gibt es einen Folder-Watcher?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
jeder kennt ja den File Watcher
Meinst Du den FileSystemWatcher? Der kann auch mit Ordnern...
Zitat von MSDN
Listens to the file system change notifications and raises events when a directory, or file in a directory, changes.
Gruß, MarsStein

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Hallo zusammen,

ich hatte das gestern abend als einfach verkettete Liste implementiert - effizient ist sowas natürlich nicht, vor allem beim Index-Zugriffen.
Mein Ansatz war aber ein völlig anderer, deshalb poste ich es auch noch nachträglich.
Gü hat natürlich das Recht der ersten richtigen Lösung.

Linq-Extensions waren nicht verboten, oder?

public class List<T> : IList<T>
{
    class ListNode
    {
        public ListNode(T val, ListNode next = null)
        {
            Value = val;
            Next = next;
        }
        
        public T Value { get; }
        public ListNode Next { get; set; }
    }

    ListNode _root = new ListNode(default(T));

    public int Count { get; private set; }

    public T this[int index]
    {
        get
        {
            if (index ≥ Count)
                throw new IndexOutOfRangeException();

            return GetNodes().Skip(index).First().Value;
        }
    }

    public IEnumerator<T> GetEnumerator() => GetNodes().Select(n => n.Value).GetEnumerator();

    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

    public void Add(T item) => InsertAt(Count, item);

    public bool Contains(T item) => GetNodes().Any(n => object.Equals(n.Value, item));

    public void Clear()
    {
        _root.Next = null;
        Count = 0;
    }

    public int IndexOf(T item)
    {
        int idx = GetNodes().TakeWhile(n => !object.Equals(n.Value, item)).Count();
        return (idx == Count) ? -1 : idx;
    }

    public void InsertAt(int index, T item)
    {
        if((index > Count) || (index < 0))
            throw new ArgumentOutOfRangeException(nameof(index));

        var node = GetNodes(true).Skip(index).First();
        node.Next = new ListNode(item, node.Next);
        Count++;
    }

    public bool Remove(T item)
    {
        var node = GetNodes(true)
                    .SkipWhile(n => (n.Next == null) || !object.Equals(n.Next.Value, item))
                    .FirstOrDefault();
        if (node == null)
            return false;

        node.Next = node.Next.Next;
        Count--;
        return true;
    }

    public void RemoveAt(int index)
    {
        if((index ≥ Count) || (index < 0))
            throw new ArgumentOutOfRangeException(nameof(index));

        var node = GetNodes(true).Skip(index).First();
        node.Next = node.Next.Next;
        Count--;
    }

    IEnumerable<ListNode> GetNodes(bool includeRoot = false)
    {
        var node = _root;
        if (includeRoot)
            yield return node;
        while ((node = node.Next) != null)
            yield return node;
    }
}
Getestet habe ich ebenfalls nur rudimentär, da hat soweit alles funktioniert...

Gruß, MarsStein

Thema: Daten aus Flashplayer exportieren
Am im Forum: Netzwerktechnologien

Hallo,

weisst Du, wo der Flashplayer die Daten herbekommt?
Vermutlich wird der die ja auch aus irgend einer Quelle aus dem Netz laden, dann würde ich versuchen, die gleiche Quelle zu benutzen.

Was vom Flashplayer nachgelden wird, kannst Du in der "Netzwerkanalyse" aus den Entwicklertools vom Firefox sehen. Vielleicht findest Du dort eine URL, von der Du die Daten direkt abbrufen kannst.
Da stellt sich nur die Frage, ob das von dem Anbieter das Daten auch erlaubt ist.

Gruß, MarsStein

Thema: Beim Zeichnen von Rectangles / Brushes wird Methode nicht unterstützt, Code läuft aber weiter
Am im Forum: Grafik und Sound

Hallo,

das Graphics-Objekt solltest Du disposen, bevor Du das Bild in den Stream schreibst.
Vermutlich löst das schon das Problem.
Besser wäre es noch, für Bitmap und Graphics einen using-Block zu verwenden.

Gruß, MarsStein

EDIT: für PNG-Bilder muss man den Umweg über MemoryStream gehen, wie im Link von inflames2k beschrieben.

Thema: WPF neue Listbox bei SelectionChangedEvent erstellen
Am im Forum: GUI: WPF und XAML

Hallo,

Du erstellst zwar eine neue Listbox, dem Code ist aber nicht zu entnehmen, dass Du diese auch irgenwo zum UI hinzufügst.

Es fehlt also etwas in der Art

SomeParentElement.Children.Add(lb);
Dann wird natürlich auch nichts angezeigt...

Gruß, MarsStein

Hmm, Taipi88 war schneller...

Thema: Funktion aus einer Form in einer anderen ausführen
Am im Forum: Grundlagen von C#

Hallo,

offenbar ist das Programm ja bisher so geschrieben, dass MainForm in der anderen Form nicht bekannt ist (sonst hättest Du das Problem nicht).

Das Programm müsste IMO dann für die gewünschte Funktionalität nicht umgeschrieben, sondern erweitert werden. Dann ist es aber nicht aufwändiger, es gleich richtig zu machen, als zu frickeln.

Gruß, MarsStein

Thema: Dreieck an Ende von ArcSegment zeichnen
Am im Forum: GUI: WPF und XAML

Hallo,

pack einfach noch ein paar LineSegment mit rein, so in der Art:

                      <PathFigure.Segments>
                            <ArcSegment Point="0,10" Size="10,10" SweepDirection="CounterClockwise" IsLargeArc="True"/>
                            <LineSegment Point="-4,10"/>
                            <LineSegment Point="0,14"/>
                            <LineSegment Point="4,10"/>
                            <LineSegment Point="0,10"/>
                        </PathFigure.Segments>


Gruß, MarsStein

Thema: Funktion aus einer Form in einer anderen ausführen
Am im Forum: Grundlagen von C#

Hallo,

Das zweite Form sollte das erste gar nicht kennen, sondern Events anbieten, die vom ersten Form abonniert werden.
schau Dir mal [FAQ] Kommunikation von 2 Forms an.

Gruß, MarsStein

Edit: Und die dort verlinkten Threads auch, zum besseren Verständis...

Thema: String (Un)Boxing: Wird prim. Datentyp in object gewandelt-Kann toString() aufrufen? + Performance
Am im Forum: Grundlagen von C#

Hallo,

bei solchen primitiven Dingen würde ich mir an Deiner Stelle über Performance gar keine Gedanken machen, sondern mich darauf verlassen, dass der Compiler das richtig optimiert.
Alles andere fällt in den Bereich PMO (pre mature optimization -> the root of all evil ;) )

Mit anderen Worten: Könnte man hier viel Rechenzeit sparen, würde der Compiler IMO an der Stelle die performantere Variante generieren.

Gruß, MarsStein

Edit: Dazu kommt, wie LaTino richtig anmerkt, auch noch die Tatsache, dass der JITter auch noch ins Spiel kommt. Was der letztlich daraus macht... ist seine Sache.

Thema: Window.IsMouseOver ist false beim WebBrowserControl
Am im Forum: GUI: WPF und XAML

Hallo,

also das Ereignis von HTMLDocumentEvents2_Event wird schon ausgelöst (jedenfalls bei mir) - allerdings nur dann, wenn auch schon ein Dokument geladen ist.

Trotzdem ist es schwierig, damit zu hantieren - man bekommt das Ereignis nämlich für alle möglichen Elemente des HTML-Dokuments, und man bräuchte auch noch onmouseout um festzustellen, wann das Control (oder vielmehr das Dokument) wieder verlassen wird.
Dazu kann man eigentlich nur die Property srcElement zurateziehen - das ist aber Mist, weil man MouseOut-Ereignisse auch für Elternelemente bekommt, wenn man über ein geschachteltes Element fährt, man kann also nie sagen, ob man das srcElement nach aussen oder intern "verlassen" hat.
Ansonsten fällt mir nur noch ein, über die Mauskoordinaten zu gehen. Dann wird's aber auch ein Hickhack :( :(

Gruß, MarsStein

Thema: target="_blank"-link in Standardbrowser öffnen
Am im Forum: GUI: WPF und XAML

Hallo,

Zitat von MrSparkle
Du kannst dazu das entsprechende Ereignis des WebBrowser-Controls abonieren
das wäre in dem Fall das Navigating-Ereignis. In den EventArgs bekommst Du das Uri-Objekt, das die Information enthält, wohin gerade navigiert wird.
Damit kannst Du dann machen, was Du willst - z.B. einen neuen Prozess starten und die Seite übergeben.
Anschließend noch in den EventArgs Cancel = true setzen, damit die Webbrowser-Komponente die Seite nicht zusätzlich auch noch lädt.

Gruß, MarsStein

Thema: [gelöst] Wie rechne ich Hex Code in RGB Werte um?
Am im Forum: Grafik und Sound

Hallo,

die FromHtml-Methode gibt Dir ein Color-Objekt zurück. Aus diesem kannst Du die RGB-Werte direkt über die Properties R, G und B auslesen.

Den Rest der Frage verstehe ich nicht so recht - Du brauchst ja eigentlich nur noch die Werte nehmen, und in Deine entsprechenden Textfelder/Slider oder sonstigen Controls die Du zur Anzeige benutzt, eintragen.

Gruß, MarsStein

Thema: Beste Vorgehensweise bei Erstellung von Klassen
Am im Forum: Grundlagen von C#

Hallo,

das Konstrikt mit DoubleString und DoubleStringList finde ich recht kurios:

  public struct DoubleString
  {
    public string key;
    public string value;
  }
  public class DoubleStringList : List<DoubleString> { }

Stattdessen würde man wohl eher ein Dictionary<string,string> statt der DoubleStringList verwenden, und spart sich damit die DoubleString-Klasse (es sei denn die keys könnten mehrfach vorkommen, dann wäre allerdings der Name "key" unpassend).

Gruß, MarsStein

Thema: Inhalt einer TextBox löschen
Am im Forum: Rund um die Programmierung

Hallo,

dem Code nach, den Du hier gezeigt hast, deutet alles darauf hin, dass nach den Clear()-Aufrufen der Text der TextBoxen nochmal von anderswo gesetzt wird - wie das Stefan.Haegele auch schon angedeutet hat.
Hierfür kommen vorzugsweise die Methoden initializeImages() und beschreibung() in Frage.

Also solltest Du jetzt mal mit dem Debugger Schritt für Schritt durchgehen und schauen, wo und warum das passiert.

Gruß, MarsStein

Thema: Eigene Application aus Fremdapplication ansteuern
Am im Forum: Rund um die Programmierung

Hallo,

in dem Zusammenhang auch interessant: WCF and ASP.NET Web API

Gruß, MarsStein

Thema: Wie kann ich mit dem WPF-Slider-Control den kompletten Double-Bereich abdecken?
Am im Forum: GUI: WPF und XAML

Hallo,

ich habe mal gerade etwas damit experimentiert.

Von Double.MinValue asl Minimum bis 0 als Maximum gibt es keine Probleme, ebenso von 0 als Minimum bis Double.MaxValue als Maximum
Wenn ich allerdings als Maximum den MaxValue setze, spinnt der Slider sobald der MinValue unter -1e291 geht. Bis dahin funktioniert er bei mir.

Ich denke, die Berechnungen finden alle mit double-Werten statt, deshalb muss der gesamte Bereich (also die Differenz zwichen Maximum und Minimum) vermutlich zumindest mal durch einen Double darstellbar sein. Ist aber nur eine Vermutung, belegen kann ich das nicht und genau nachgerechnt hab ich jetzt auch nicht.

Gruß, MarsStein

Edit: durch einen Double darstellbar ist ist ja Unsinn - dann würde das ja so nicht funktionieren wie gerade beschrieben. Trotzdem muss der Bereich wiohl so geartet sein, dass damit (möglicherweise auch abhängig von der Länge des Sliders) noch vernünftig Berechnungen im Double-Bereich durchgeführt werden können.

Fraglich ist, wofür das gut sein soll. Die Auflösung des Sliders hängt an der Pixelgröße, mehr brauicht man theoretisch nicht um von da aus linear auf den gesamten Double-Bereich durch einfache Rechnung zu skalieren.

Thema: Wie kann ich auf einer Webseite die Credentials automatisch ausfüllen lassen?
Am im Forum: Web-Technologien

Hallo,

dafür muss man aber dann Chrome die PWs speichern lassen -> ich kann jeden verstehen, für den das keine Option darstellt.
Vor allem muss man dann auch noch vorsichtig sein, ob und wann man angemeldet ist, denn:

Zitat
Wenn Sie in Chrome angemeldet sind, werden Ihre Passwörter zudem mit Ihrem Google-Konto synchronisiert, sodass Sie sie auf verschiedenen Geräten nutzen können.

Quelle: Gespeicherte Passwörter verwalten

Mir persönlich steckt da viel zuviel Automatismus drin.
Ist aber jedermanns Sache selbst. Ich will nur darauf hinweisen, aber hier keinen Glaubenkrieg starten und werde dementsprechend nicht auf Bemerkungen dazu antworten/eingehen.

Gruß, MarsStein

Thema: [Gelöst] UWP: ListView - Kann man "CanreorderItems" binden
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo,

wie's aussieht, handelt es sich bei CanReorderItems nicht um eine DependencyProperty.
Dann sieht's mit Binding schlecht aus.
Müsste aber mit 'nem AttachedProperty lösbar sein.

Gruß, MarsStein

Thema: System.Runtime.Remoting.Channels.Ipc wird nicht gefunden
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Und da System.Runtime.Remoting gefunden wird, sollte die Assembly System.Runtime.Remoting.dll auch eingebunden sein.
Was heisst sollte? Hast Du das überprüft?
Den Namespace gibt's z.B. auch in der mscorlib.

Gruß, MarsStein

Thema: Benachrichtigung, dass Panel ausserhalb eines Spielfeldes (Panel) ist, kommt zu spät
Am im Forum: GUI: Windows-Forms

Hallo,

Zitat
Das erklärt das Verhalten aber noch immer nicht.
Das hängt von der Implementierung ab, wie Du die Panels bewegst. Die kennen wir ja nicht. Wenn Du da irgendwo mit den verkehrten Koordinaten/Offsets arbeitest, kann das den Effekt durchaus erklären.

Gruß, MarsStein

Thema: Benachrichtigung, dass Panel ausserhalb eines Spielfeldes (Panel) ist, kommt zu spät
Am im Forum: GUI: Windows-Forms

Hallo,

Du scheinst hier die Koordinaten relativ zum Fenster und die relativ zum Spielfeld durcheinander zu bringen:

Zitat
X-Koordinate des Spielfelds: 43
Zitat
X-Koordinate des Kopfes = 16
Wenn diese Koordinaten den selben Ursprung hätten, wäre die Schlange bei 16 ja schon lange draussen.
Du musst auf jeden Fall zuallererst zwischen diesen Koordinatensystemen unterscheiden. Wenn Du dann raus hast, mit welchen Koordinaten Du tatsächlich rechnen musst, stimmt es bestimmt schon wieder ;)
Bedenke auch: Der Kopf stellt ja eine ganze Fläche von 6x6px dar. "Die" Koordinate des Kopfes kann also auch nur einer dieser 6x6 Punkte sein.

Gruß, MarsStein