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 Pardasus
Thema: ASP.NET WebAnwendung soll mit Windows Dienst sprechen
Am im Forum: Web-Technologien

Vielen Dank, werde ich mir mal ansehen.

Thema: ASP.NET WebAnwendung soll mit Windows Dienst sprechen
Am im Forum: Web-Technologien

Moin zusammen,
ich habe einen Windows Dienst laufen der 24/7 dinge tut. Nun möchte ich mir eine ASP.NET Seite bauen die Informationen darüber anzeigt, was der Dienst den gerade so treibt.
Wie gehe ich das nun am schlauesten an, wenn ich möchte das die beiden miteinander sprechen?

p.s.: Der Dienst schaut sich XML Files an und schieb diese dann unter gewissen bedingen in ein anderes Verzeichnis weiter.

Thema: Visual Studio 2018 Pro zu 2019 - Lizenz Update nötig?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ups, ja ich meine 2017 natürlich. Vielen Dank für die schnelle Antwort!
Dann brauche ich wohl ein Kostenpflichtiges Update.

Thema: Visual Studio 2018 Pro zu 2019 - Lizenz Update nötig?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Moin zusammen,
auf der Arbeit habe ich eine Pro Lizenz von Visual Studio in der 2018er Version. Kann man hier einfach auf 2019 wechseln oder muss dafür ein Update gekauft werden?

Thema: Oracle 11.2 Client findet die OraOps12.dll nicht
Am im Forum: Datentechnologien

@Khalid
Das ist die Lösung! Ich bin begeistert :-) nicht nur das ich jetzt mit einer DLL auskomme, es funktioniert auch wunderbar!

Vielen Dank!

Thema: Oracle 11.2 Client findet die OraOps12.dll nicht
Am im Forum: Datentechnologien

@Th69 leider nein, dass hatte ich auch schon gefunden.

@Khalid
Meinst Du die ODP.NET_Managed_ODAC122cR1 bzw. Oracle.ManagedDataAccess.dll ?

Thema: Oracle 11.2 Client findet die OraOps12.dll nicht
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Oracle

Ich habe ein kleines Programm geschrieben welches kein Installierten Oracle Client benötigt, da im Verzeichnis selbst die passenden DLL liegen. Es läuft auf jeden System, bis auf einem wo ein Oracle 11.2 Installiert ist. Dort sagt er mir, er findet die OraOps12.dll nicht.
Ich habe im Netz einfach keine Lösung gefunden, vielleicht hat hier noch jemand eine Idee?

Fehler
************** Ausnahmetext **************
System.DllNotFoundException: Die DLL "OraOps12.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
bei Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version)
bei Oracle.DataAccess.Client.OracleInit.Initialize()
bei Oracle.DataAccess.Client.OracleConnection..cctor()


************** Geladene Assemblys **************
mscorlib
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2563.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll.
----------------------------------------
BobImport
Assembly-Version: 1.0.0.0.
Win32-Version: 1.0.0.0.
CodeBase: file:///D:/BobImport/BobImport.exe.
----------------------------------------
System.Windows.Forms
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
----------------------------------------
System
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Drawing
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
System.Configuration
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
----------------------------------------
System.Core
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2563.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
----------------------------------------
System.Xml
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2612.0 built by: NET471REL1LAST_B.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
----------------------------------------
Oracle.DataAccess
Assembly-Version: 4.122.1.0.
Win32-Version: 4.122.1.0.
CodeBase: file:///D:/BobImport/Oracle.DataAccess.DLL.
----------------------------------------
System.Data
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2623.0 built by: NET471REL1LAST_C.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll.
----------------------------------------
System.Transactions
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll.
----------------------------------------
mscorlib.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
----------------------------------------
System.Windows.Forms.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.7.2558.0 built by: NET471REL1.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
----------------------------------------

Thema: Wie kann ich einen Oracle Trigger über C# setzen?
Am im Forum: Datentechnologien

@Abt
der zweite Link hat geholfen ;-) gefällt mir was ich dort sehe.

@Th69
Ja, das habe ich auch probiert. Allerdings bis jetzt ohne Erfolg.

Ich bin gerade ein Stück weiter gekommen. => Hier ≤ hatte jemand ein änhliches Problem und hat unter anderem die "\r"Zeichen entfernt.

Wenn ich nun das erstellen des Triggers in ein separaten SQL Skript lege und dort mit .Trim() die "\r" Zeichen durch ein leeren String austausche, funktioniert es :-)

Jetzt muss ich nur noch ein weg finden wie ich beides in ein SQL Skript wieder bekomme der Übersichtlichst halber.

Thema: Wie kann ich einen Oracle Trigger über C# setzen?
Am im Forum: Datentechnologien

Danke für den Tip, muss aber zugeben nicht zu verstehen was das macht bzw. wie man dies nutzt.

Thema: Wie kann ich einen Oracle Trigger über C# setzen?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <Oracle 18.2>

Nach viele Stunden des Probierens und des Suchens, seit ihr nun meine letzte Hoffnung.

Ich möchte, das wenn eine Tabelle nicht in der Datenbank vorhanden ist, neu erstellt wird. Dies ist
ja keine große Sache. Auch den Primary Key setzten und eine Sequence erstellen, alles kein Problem über C#.

Aber wenn ich ein Trigger mit einbauen möchte, der die ID Automatisch hochzählt, will das einfach über C# nicht Funktionieren.

Hier mal ein minimal Beispiel:


CREATE TABLE CUSTOMERS 
(
  ID NUMBER NOT NULL 
, NAME VARCHAR2(20) 
, CONSTRAINT CUSTOMERS_PK PRIMARY KEY 
  (
    ID 
  )
  ENABLE 
);

CREATE SEQUENCE CUSTOMERS_SEQ;

CREATE TRIGGER CUSTOMERS_TRG 
BEFORE INSERT ON CUSTOMERS 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.ID IS NULL THEN
      SELECT CUSTOMERS_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/

Ich lese das SQL Skript mit C# ein, entferne die Leerzeichen und mache ein COMMIT nach jedem ';'
Aber irgendwie will der Trigger nicht. Klar ich kann auch selbst bei jeden Statement ein 'CUSTOMERS_SEQ.NEXTVAL' machen, aber das irgendwie doof.

Ich habe beim Trigger auch mal die ';' entfernt. Dann wird der Trigger zwar in die DB eingespielt, lässt sich aber nicht Kompilieren, da die ';' fehlen.

HILFE... ;-)

Thema: SQL Connection Passwort Verschlüsseln
Am im Forum: Datentechnologien

Super, danke für den Link!

Ich stimme dir zu @Abt, dass man das Passwort da nicht drin speichern sollte. Darum ja meine frage :-)

Thema: SQL Connection Passwort Verschlüsseln
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <Oracle>

Moin

Wir haben bei uns auf der Arbeit nur ein gemeinsamen Git Zugang (lange Geschichte).
Ich habe nun ein Programm, welches sich mit einer Oracle Datenbank Verbindet. Nun möchte ich aber
nicht das Passwort in Klartext dort abspeichern.

Gibt es da ein Trick, wie ich das Passwort in Quelltext "Verschlüsseln" kann?

Thema: MAC Adresse übers Netzwerk auslesen ohne arp bzw. externen Process?
Am im Forum: Netzwerktechnologien

Vielen Dank für die Links!

Ich hatte dazu bereits im Netz gesucht, aber nur Beispiele gefunden wie man über ein Process auf die arp zugreift.

Thema: MAC Adresse übers Netzwerk auslesen ohne arp bzw. externen Process?
Am im Forum: Netzwerktechnologien

Ich habe im Internet ein Code-Snippet gefunden mit den man die MAC Adresse über die IP heraus bekommt. Das Funktioniert auch wunderbar, aber geht das auch in "schöner" oder ein Process zu nutzen?

So schaut die Methode aus:


private string GetMacAddress(string ipAddress)
        {
            string macAddress = string.Empty;
            System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
            pProcess.StartInfo.FileName = "arp";
            pProcess.StartInfo.Arguments = "-a " + ipAddress;
            pProcess.StartInfo.UseShellExecute = false;
            pProcess.StartInfo.RedirectStandardOutput = true;
            pProcess.StartInfo.CreateNoWindow = true;
            pProcess.Start();
            string strOutput = pProcess.StandardOutput.ReadToEnd();
            string[] substrings = strOutput.Split('-');
            if (substrings.Length ≥ 8)
            {
                macAddress = substrings[3].Substring(Math.Max(0, substrings[3].Length - 2))
                         + "-" + substrings[4] + "-" + substrings[5] + "-" + substrings[6]
                         + "-" + substrings[7] + "-"
                         + substrings[8].Substring(0, 2);
                return macAddress;
            }

            else
            {
                return "not found";
            }

Thema: ListView - Item Selection Changed Event setzt den Text kurz auf leeren String
Am im Forum: GUI: Windows-Forms

Moin

Das "Item Selection Changed Event" wird ausgelöst, wenn sich die Auswahl in einem ListView ändert.
Wenn man in der GUI nun von Zeile A in Zeile B wechselt, wird diese Event drei mal ausgelöst.

- Zeile A ist Markiert
- keine Zeile ist Markiert
- Zeile B ist Markiert

Ich habe eine GUI wo sich einige Label Texte ändern, wenn man in dem ListView einen Eintrag auswählt. Wenn allerdings kein Item in dem ListView ausgewählt ist, wird der Label Text gelöscht.

Alles keine große Sache und läuft auch Wunderbar. Das Problem dabei ist, dass das Label anfängt zu "blinken" wenn man zwischen den Eintragen wechselt.

- Zeile A ist Markiert ( Label Text = "XYZ" )
- keine Zeile ist Markiert ( Label Text = "" )
- Zeile B ist Markiert ( Label Text = "ZXH" )

Das sieht irgendwie doof aus, dieses "Blinken". Wie Programmiere ich es, dass nur wenn wirklich nichts ausgewählt ist, der Label Text auf = "" sich ändert?

Thema: XML To TreeView
Am im Forum: .NET-Komponenten und C#-Snippets

Ich war mal so frei und habe den Code leicht korrigiert und um die Ausgabe des Values ergänst.


/// <summary>
/// Diese Methode lädt ein XML-Dokument, geht es hierarchisch durch und fügt jeweils die Value Eigenschaft 
/// eines XML-Nodes in eine TreeView als Node ein
/// </summary>
/// <param name="treeView"></param>
public void XmlToTreeView(TreeView treeView)
{
    XmlDocument myXmlDocument = new XmlDocument();
    myXmlDocument.Load("yourXMLFile.xml");
    treeView.Nodes.Clear();
    XmlRekursivImport(treeView.Nodes, myXmlDocument.DocumentElement.ChildNodes);
}

private void XmlRekursivImport(TreeNodeCollection elem, XmlNodeList xmlNodeList)
{
    TreeNode treeNode = new TreeNode();

    foreach (XmlNode myXmlNode in xmlNodeList)
    {
        if (myXmlNode.Value == null)
        {
            treeNode = new TreeNode(myXmlNode.Name);
        }
        else
        {
            treeNode = new TreeNode(myXmlNode.Value);
        }

        if (myXmlNode.ChildNodes.Count > 0)
        {
            XmlRekursivImport(treeNode.Nodes, myXmlNode.ChildNodes);
        }
        elem.Add(treeNode);
    }
}

Thema: Label Objekt zum Blinken gebracht
Am im Forum: Code-Reviews

WoW, vielen Dank für dein sehr ausführlichen Beitrag und tollen Tipps! Ich habe den Code mal angepasst.
Ist das Dispose() nun auch richtig?


    public class LabelFlash : IDisposable
    {
        private System.Timers.Timer _timer = new System.Timers.Timer(1000);

        /// <summary>
        /// Gibt das Aktuell genutzte Label zurück.
        /// </summary>
        public Label LabelObj { get; } = null;

        /// <summary>
        /// Gibt das Intervall in dem das Label blinken soll in ms zurück oder legt dieses fest.
        /// </summary>
        public double Interval
        {
            get { return _timer.Interval; }
            set { _timer.Interval = value; }
        }

        /// <summary>
        /// Legt fest ob das Label weiter Blinken soll wenn der Text geändert wird. Standard ist Deaktiviert
        /// </summary>
        public bool ChangeStop { get; set; } = false;

        /// <summary>
        /// Legt den Text des Label fest oder ruft diesen ab.
        /// </summary>
        public string Text
        {
            get
            {
                if (LabelObj.InvokeRequired)
                {
                    return (string)LabelObj.Invoke(new Func<string>(() => LabelObj.Text));
                }
                else
                {
                    return LabelObj.Text;
                }
            }
            set
            {
                LabelObj.ForeColor = System.Drawing.Color.Black;

                if (LabelObj.InvokeRequired)
                {
                    LabelObj.Invoke(new Func<string>(() => LabelObj.Text = value));
                }
                else
                {
                    LabelObj.Text = value;
                }
            }
        }

        /// <summary>
        /// Legt den Text des Labels fest und ändert die Farbe auf Rot ab.
        /// </summary>
        public string AlertText
        {
            set
            {
                LabelObj.ForeColor = System.Drawing.Color.Red;

                if (LabelObj.InvokeRequired)
                {
                    LabelObj.Invoke(new Func<string>(() => LabelObj.Text = value));
                }
                else
                {
                    LabelObj.Text = value;
                }
            }
        }

        /// <summary>
        /// Bringt ein Label zum Blinken in einem festgestelten ms Interval.
        /// </summary>
        /// <param name="labelObj">Label weches blinken soll.</param>
        public LabelFlash(Label labelObj)
        {
            this.LabelObj = labelObj;
            _timer.Elapsed += _timer_Elapsed;
            this.LabelObj.TextChanged += LabelObj_TextChanged;
        }

        /// <summary>
        /// Bringt ein Label zum Blinken in dem übergebenen ms Interval.
        /// </summary>
        /// <param name="labelObj">Label welches blinken soll.</param>
        /// <param name="interval">Interval in ms.</param>
        public LabelFlash(Label labelObj, double interval) : this(labelObj)
        {
            _timer.Interval = interval;
        }

        /// <summary>
        /// Startet das Blinken des Labels.
        /// </summary>
        /// <returns></returns>
        public LabelFlash Start()
        {
            _timer.Start();
            return this;
        }

        /// <summary>
        /// Startet das Blinken des Labels.
        /// </summary>
        /// <param name="changeStop">Legt fest ob das Label weiter Blinken soll wenn der Text geändert wird.</param>
        /// <returns></returns>
        public LabelFlash Start(bool changeStop)
        {
            _timer.Start();
            ChangeStop = changeStop;
            return this;
        }

        /// <summary>
        /// Stop das Blinken des Labels und macht es wieder sichtbar.
        /// </summary>
        public void Stop()
        {
            _timer.Stop();
            LabelObj.Visible = true;
        }

        // Wenn Aktiviert, hört das Label auf zu Blinken wenn der Text geändert wird.
        private void LabelObj_TextChanged(object sender, EventArgs e)
        {
            if (ChangeStop)
            {
                Stop();
            }
        }

        // Wird im Defenierten Interval ausgeführt und lässt das Label Asynchron Blinken.
        private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (LabelObj.InvokeRequired)
            {
                LabelObj.Invoke(new Action(() => _timer_Elapsed(sender, e)));
            }
            else
            {
                LabelObj.Visible = !LabelObj.Visible;
            }
        }

        ~LabelFlash()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                _timer.Dispose();
            }

            LabelObj.TextChanged -= LabelObj_TextChanged;
            _timer.Elapsed -= _timer_Elapsed;
        }
    }

Thema: Label Objekt zum Blinken gebracht
Am im Forum: Code-Reviews

Erst einmal Danke für das Feedback!

Zitat
Mir scheint es so, als würdest Du zwei Aufgaben vermischen.
Zum Einen lässt die Klasse das Label blinken und zum Anderen schreibt sie den Text des Labels mit verschiedenen Farben. Abgesehen davon, dass die Farben von außen nicht geändert werden können, hat das Text und Farbe ändern nichts mit dem Blinken an sich zu tun, oder?
Das würde ich daher komplett raus lassen, immerhin verschenkst Du dadurch Flexibilität und erhöhst unnötig die Komplexität.
Abgesehen davon würde das Ändern der Farbe aus einem anderen Thread heraus wahrscheinlich crashen ;)
Da hast Du recht, es sieht aus als würde ich was vermischen. Ich habe ein kleines Programm was im Hintergrund z.b. Daten einliest und es soll Signalisiert werden "Hey ich tun gerade was im Hintergrund". Wenn dann etwas schief läuft, soll der Text aufhören zu Blinken und Rot werden. Damit ich aus einen beliebigen Thread heraus das machen kann, habe ich mir auch gleich noch gedacht das sich das Objekt darum kümmern kann, dass der Text auch wirklich ausgegeben wird (die ganze Invoke Geschichte).
Aus meiner Perspektive sah das alles klar aus und gehört zusammen :-)
Zitat
Die ChangeStop-Property kannst Du auch automatisch implementieren lassen, das spart eine Zeile Code :D
Da stehe ich gerade auf dem schlauch, wie meinst Du das?
Zitat
Ich würde - nur meine subjektive Ansicht - das Label nicht von außen ändern lassen, die Label-Property würde ich also entfernen. Alles was von außen geändert werden kann, musst Du verwalten bzw. Du musst die Änderungen beachten können. Wenn das nicht unbedingt notwendig ist, erhöht es nur die Komplexität ohne wirklichen Gewinn.
Du meinst, das _labelObj sollte nicht nach dem Instanzieren des Objekts änderbar sein? Mmh, das stimmt. Wenn man das möchte, muss man sich ein neues Objekt Instanzieren, dann kann nichts schief gehen. Danke!
Zitat
Ich persönlich versuche Konstruktoren immer so zu bauen, dass alle Überladungen nichts weiter tun als ihre Parameter aufzubereiten und an einen anderen Konstruktor weiter zu reichen - oder Default-Werte übergeben. Daraus resultiert, dass von vielen Konstruktoren nur Einer die eigentliche Arbeit tut und die Anderen nur weiter leiten. Spätestens bei komplexen Initialisierungen wird das hilfreich.
Du könntest z.B. für den interval-Parameter optional deklarieren und mit einem sinnvollen Default-Wert versehen. Oder die Überladung ohne diesen Parameter gibt diesen Default-Wert weiter.
Das geht natürlich nur, wenn die Initialisierungs-Varianten sich nicht zu stark von einander unterscheiden, aber da muss man dann je nach Situation schauen.
Wie ruft den der eine Konstruktor den anderen auf?
Zitat
Methoden-Parameter werden mit kleinem ersten Buchstaben geschrieben ;) Das ist zumindest sehr weit verbreitet, ich glaub Microsoft hat das in einer Guideline veröffentlicht.
Super, danke! :) ich bin immer noch dabei mein Stil zu finden. Versuche mich aber sehr an "feste" Regeln zu halten.

Zu den Dispose() mal Grundsätzlich. Da ich bis jetzt sehr kleine, unbedeutsame Anwendung geschrieben habe, habe ich mich nie damit ernsthaft Beschäftigt bei meinen eigenen Objekten.
Klar, wenn ich z.b. ein Objekt benutzt wie FileStream etc. wo ein Dispose() dabie ist, nutze ich diesen auch. Habe aber nie wirklich selbst ein in mein Objekt eingebaut.
Ist vielleicht jetzt der falsche bereich im Forum, aber wie würde ich für diese Objekt von mir ein Dispose() richtig hinterlegen?

Thema: Wie kann ich Code in Methoden auslagern und Variablen effizienter nutzen?
Am im Forum: Code-Reviews

@anideath
solltest Du das hier noch Lesen und das Programmieren nicht aufgegeben haben dann Kaufe dir diese Buch "Visual C# 2015 – Grundlagen, Profiwissen und Rezepte".
Ich habe unheimlich viel dadurch gelernt. Wenn man dann noch 1-2 Jahre an Erfahrung Sammelt kommt so langsam brauchbar Code zusammen ;-)

Thema: Label Objekt zum Blinken gebracht
Am im Forum: Code-Reviews

Moin,
ich habe mir etwas gebaut, womit ein beliebiges Label Objekt zum Blinken gebracht werden kann und selbst aus einem "fremden" Thread heraus, über das Objekt der Text einfach abgeändert werden kann.

Eigentlich bin ich ganz zufrieden damit, bis auf das Dispose() vielleicht hat da jemand noch ein Tipp für mich? Wenn man nach dem Dispose() z.b. wieder Start() ausführt, kommt eine Fehlermeldung, irgendwie noch unschön. Ich weis das man nach dem Dispose() den Start() nicht wieder ausführen kann ;-) freue mich auf Feedback zum Code.


    public class LabelFlash : IDisposable
    {
        private System.Timers.Timer _timer = new System.Timers.Timer(1000);
        private Label _labelObj = null;
        private bool _changeCanStop = false;

        /// <summary>
        /// Gibt das Aktuell genutzte Label zurück oder legt dieses fest.
        /// </summary>
        public Label Label
        {
            get { return _labelObj; }
            set
            {
                _labelObj.Visible = true;
                _labelObj = value;
            }
        }

        /// <summary>
        /// Gibt das Intervall in dem das Label blinken soll in ms zurück oder legt dieses fest.
        /// </summary>
        public double Interval
        {
            get { return _timer.Interval; }
            set
            {
                _timer.Interval = value;
            }
        }

        /// <summary>
        /// Legt fest ob das Label weiter Blinken soll wenn der Text geändert wird. Standard ist Deaktiviert
        /// </summary>
        public bool ChangeStop
        {
            get { return _changeCanStop; }
            set { _changeCanStop = value; }
        }

        /// <summary>
        /// Legt den Text des Label fest oder ruft diesen ab.
        /// </summary>
        public string Text
        {
            get
            {
                if (_labelObj.InvokeRequired)
                {
                    return (string)_labelObj.Invoke(new Func<string>(() => _labelObj.Text));
                }
                else
                {
                    return _labelObj.Text;
                }
            }
            set
            {
                _labelObj.ForeColor = System.Drawing.Color.Black;

                if (_labelObj.InvokeRequired)
                {
                    _labelObj.Invoke(new Func<string>(() => _labelObj.Text = value));
                }
                else
                {
                    _labelObj.Text = value;
                }
            }
        }

        /// <summary>
        /// Legt den Text des Labels fest und ändert die Farbe auf Rot ab.
        /// </summary>
        public string AlertText
        {
            set
            {
                _labelObj.ForeColor = System.Drawing.Color.Red;

                if (_labelObj.InvokeRequired)
                {
                    _labelObj.Invoke(new Func<string>(() => _labelObj.Text = value));
                }
                else
                {
                    _labelObj.Text = value;
                }
            }
        }

        /// <summary>
        /// Bringt ein Label zum Blinken in einem festgestelten ms Interval.
        /// </summary>
        /// <param name="LabelObj">Label welches blinken soll.</param>
        public LabelFlash(Label LabelObj)
        {
            _labelObj = LabelObj;
            _timer.Elapsed += _timer_Elapsed;
            _labelObj.TextChanged += _labelObj_TextChanged;
        }

        /// <summary>
        /// Bringt ein Label zum Blinken in dem übergebenen ms Interval.
        /// </summary>
        /// <param name="LabelObj">Label welches blinken soll.</param>
        /// <param name="Interval">Interval in ms.</param>
        public LabelFlash(Label LabelObj, double Interval)
        {
            _labelObj = LabelObj;
            _timer.Interval = Interval;
            _timer.Elapsed += _timer_Elapsed;
            _labelObj.TextChanged += _labelObj_TextChanged;
        }

        /// <summary>
        /// Startet das Blinken des Labels.
        /// </summary>
        /// <returns></returns>
        public LabelFlash Start()
        {
            _timer.Start();
            return this;
        }

        /// <summary>
        /// Startet das Blinken des Labels.
        /// </summary>
        /// <param name="ChangeCantStop">Legt fest ob das Label weiter Blinken soll wenn der Text geändert wird.</param>
        /// <returns></returns>
        public LabelFlash Start(bool ChangeCantStop)
        {
            _timer.Start();
            _changeCanStop = ChangeCantStop;
            return this;
        }

        /// <summary>
        /// Stop das Blinken des Labels und macht es wieder sichtbar.
        /// </summary>
        public void Stop()
        {
            _timer.Stop();
            _labelObj.Visible = true;
        }

        // Wenn Aktiviert, hört das Label auf zu Blinken wenn der Text geändert wird.
        private void _labelObj_TextChanged(object sender, EventArgs e)
        {
            if (_changeCanStop)
            {
                Stop();
            }
        }

        // Wird im Defenierten Interval ausgeführt und lässt das Label Asynchron Blinken.
        private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (_labelObj.InvokeRequired)
            {
                _labelObj.Invoke(new Action(() => _timer_Elapsed(sender, e)));
            }
            else
            {
                _labelObj.Visible = !_labelObj.Visible;
            }
        }

        protected virtual void Dispose(bool disposing)
        {
            if(disposing)
            {
                ((IDisposable)_timer).Dispose();
                _timer = null;
            }
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(true);
        }
    }

Thema: Code Conventionen einer Klasse
Am im Forum: Smalltalk

Vielen Dank für die Hinweise! Jetzt habe ich erst einmal was zu lesen ;-)

Thema: Code Conventionen einer Klasse
Am im Forum: Smalltalk

Moin,
ich habe mal ein Simples Objekt gebastelt was einfach nur ein Label Blinken lässt in 1 Sek. Takt.
Ich bin nie so wirklich schlau draus geworden, wie man so eine Objekt von Aufbau "richtig" macht. In vielen Beispielen fließt eine Persönliche Note mit ein.
Wie würde man mein kleines Objekt ordentlich Aufbauen und was sollte man mit einem Kommentar versehen und wann ist es überflüssig?
Wo fügt man Leerzeilen ein? Gibt es da eine "regel" oder macht das jeder wie er es für "hübsch" Empfindet?

Ganz nebenbei, würde das Objekt auch noch schlanker gehen?


    public class LableBlinking
    {
        private Label _Label = null;
        private string _Text = string.Empty;
        bool _Show = false;
        System.Timers.Timer timer = new System.Timers.Timer(1000);

        /// <summary>
        /// Lässt ein Label Blinken
        /// </summary>
        /// <param name="label"></param>
        public LableBlinking(Label label)
        {
            _Label = label;
            _Text = label.Text;

            timer.Elapsed += Timer_Elapsed;
        }

        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if(_Label.InvokeRequired)
            {
                _Label.Invoke(new Action(() => Timer_Elapsed(sender, e)));
            }
            else
            {
                _Label.Text = _Show ? _Text : string.Empty;
                _Show = !_Show;
            }
        }

        // Startet den Timer fürs Blinken.
        public LableBlinking Start()
        {
            timer.Start();
            return this;
        }

        // Beende den Timer fürs Blinken.
        public void Stop()
        {
            timer.Stop();
            _Label.Text = _Text;
        }
    }

Thema: WinForm im Designer unten rechts platziert ist immer verschoben nach dem Compilieren
Am im Forum: GUI: Windows-Forms

Habe den Fehler nun finden können...

Im Code vom Desinger steht folgende Zeile für das Form1


this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

wenn ich diese Lösche, sieht der Button wieder normal aus und auch der Abstand stimmt. Aber das scheint ja kein Fehler zu sein sonder gewollt.

Thema: WinForm im Designer unten rechts platziert ist immer verschoben nach dem Compilieren
Am im Forum: GUI: Windows-Forms

Anchor: Top, Left
Margin: 3; 3; 3; 3;

So wie es von VS vorgegeben wird also quasi unverändert.

Thema: WinForm im Designer unten rechts platziert ist immer verschoben nach dem Compilieren
Am im Forum: GUI: Windows-Forms

Hier noch ein schönes Beispiel wie stark ein Button verändert wird, nach dem Compilieren.

Thema: WinForm im Designer unten rechts platziert ist immer verschoben nach dem Compilieren
Am im Forum: GUI: Windows-Forms

Moin,
ich habe da etwas was mich schon sehr nervt.

Habe bereits VisualStudio 2016 / 2017 RC und C# SharpDevelop Final und die Aktuelle Beta probiert. Überall tritt folgender Fehler auf.

Ich starte ein neues WinForm Projekt. Wenn ich dann ein Button, PictureBox ect. unten rechts im Designer schiebe und es kompiliere, ist es immer stark nach rechts verschoben und teilweise nicht mehr sichtbar. Habe ein Bild angehängt welches diese etwas verdeutlichen.

Es ist zwar nicht ganz deutlich zu erkenne auf den Bild, aber die Form rutscht immer nach rechts etwas. Im Designer sieht immer alles super aus und nach dem Compilieren eben verschoben.

Ich bin ratlos...

Thema: Datei einlesen, splitten und Speicher. Programm hängt nach 30 Dateien.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe diese nun so gelöst


public class FileSplitter
{	
	public void ReadFiles(List<FileInfo> files)
	{
		foreach (var file in files) {
			var filialName = Path.GetFileNameWithoutExtension(file.FullName);
			var datenWithoutEOF = new List<string>();
			foreach (var line in File.ReadAllLines(file.FullName)) {
				if(line.Length > 1)
					datenWithoutEOF.Add(line.Replace("\x1A", ""));
			}
			var tage = datenWithoutEOF.GroupBy(line => line.Substring(34,2) + "." + line.Substring(36,2) + "." + line.Substring(38,4));
			foreach (var tag in tage) {
				File.WriteAllLines(filialName + "_" + tag.Key + ".txt", tag);
			}
		}
	}
}

Dieser Code läuft nun wunderbar, aber ich bin mir sicher, ihr habt noch ein paar Tips für mich.
Ich muss zugeben, wie ich das mit dem DateTime einbinden soll, nicht ganz verstanden zu haben.

Dadurch, dass ich nun das EOF Zeichen aus der Datei entfernt habe, kann ich mit Substring auch wieder exakt Arbeiten.

Warum EOF-Zeichen?
Ein anderes Programm, kopiert mehrerer Dateien aneinander. Komischerweise taucht danach das EOF Zeichen in der Datei auf.
Es verschiebt mir dann ein paar Zeilen um ein Zeichen nach rechts und am ende der Datei findet sich auch noch ein einzelnes EOF Zeichen.
Ich habe eine ganze weile gebraucht, um heraus zu bekommen, was das überhaupt für ein Zeichen ist.

Thema: Datei einlesen, splitten und Speicher. Programm hängt nach 30 Dateien.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@MrSparkle / @T-Virus
da habt ihr recht. Aber muss ich dann nicht wieder in ein String zurück Konventieren, wenn ich diese als Dateinamen verwenden will?

Für das EOF Interessiere ich mich nicht direkt. Die Dateien, die ich verarbeite, werden von einen anderen Programm oft aneinander gehängt. Dann gibt es immer mal eine Zeile in der Datei, wo das EOF Zeichen die ganze Zeile nach rechts verschiebt.

Thema: Datei einlesen, splitten und Speicher. Programm hängt nach 30 Dateien.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@T-Virus
das mit den DatumParsen hatte ich schon umgestellt (siehe weiter oben). Suche mir das Datum nun mit


var tag = block.Select(b => Regex.Match(b, "[0123][0-9][01][0-9](20)[01][0-9]").Value);

Jetzt wo ich drüber nachdenke, wäre es ja wirklich viel leichter, würde ich mit ReadAllLines alles einlesen und dann mit Linq Datums-Gruppen Bilden und diese dann einfach Speicher.

Was mich aber dennoch Interessiert, warum das


yield return currentLine.Replace("\x1A", "");
nicht funktioniert. In einem anderen Programm, lässt sich damit das EOF Zeichen aus einem string einwandfrei entfernen...

p.s.: @T-Virus, ich hatte es nicht DataBlock sonder DateBlock genannt ;-)

Thema: Datei einlesen, splitten und Speicher. Programm hängt nach 30 Dateien.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@Sir Rufo
ups ;-) da hast du recht, aber bis jetzt ist mir eine Datei noch nicht unter gekommen wo ein Datum nach einem anderen, nochmals vorgekommen ist.

Hast du eine schnelle Lösung diese vielleicht komplett auszuschließen?

p.s.: suche das Datum nun mit einem RegEx => [0123][0-9][01][0-9](20)[01][0-9] das sollte für dieses Jahrtausend reichen ;-) ich hoffe ja nicht, dass jemand in nächsten Jahrtausend das Programm noch nutzt...