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 rollerfreak2
Thema: Exception: Der angegebene Datentyp ist Ungültig, obwohl Rückgabewert dem Variablen-Typ entspricht
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Gib mal nicht nur die gesamte Exception sonst können wir dir nicht helfen.

Thema: Werte eines TextBox (UserControl) an Form übergeben.
Am im Forum: GUI: Windows-Forms

Wie du schon festgestellt hast ist das beste ein Event zu definieren, bzw. das gibt es ja sogesehen schon.
TextChanged Event der Textbox. Daher braucht die Form sich nur auf das Event anmelden und schon weiß sie wenn sich ein Text ändert. Im sender der Eventmethode bekommst du dann immer die entrsprechende Textbox mit rein gereicht.

Tortzdem kann es nicht schaden die das oben besagte Turotial mal durch zu lesen, dann kannst du mal versuchen ein eigenes Event zu definieren. Im Usercontrol dann dieses Event feuern wenn sich irgednwas an irgendeiner TB ändert. Sorum ist es nämlich sauberer und richtiger, weil dann die Form nix von den TB wissen muss, nur das Event muss public sein.

Thema: Beliebig viele TabPages mit immer gleichen Controls realisieren
Am im Forum: GUI: Windows-Forms

Hallo FellFlow,

erstelle dir ein UserControl indem du davon ableitest. Dann baust du dort (geht auch mit dem Designer) alle deine Controls rein. Die BusinessLogic dazu solltest du trennen. Dann kannst du auf den einzellnen TabPages einfach immer nur das UserControl hinzufügen. Den rest macht dann deine BL.

Thema: Array[][] Reihenfolge anzeigen nach der Anordnung
Am im Forum: GUI: Windows-Forms

Hallo LeChimp,

dazu kann ich dir nicht viel sagen, nur das es mit generischen Listen einfacher geht. Aber in Linq bin ich nicht so konform.

Thema: aktualisieren eines vorhandenen labels in einem anderen form
Am im Forum: GUI: Windows-Forms

Das sehe ich genau so. Zumal Khalid dir die Lösung jetzt schon 2 mal gegeben hat. Schau dir wirklich mal den Link an, dort steh drin wie 2 Forms miteinander kommunizieren sollten.

Thema: Suche Tool, um Windows Messages zur Laufzeit anzuzeigen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Danke.

Thema: Suche Tool, um Windows Messages zur Laufzeit anzuzeigen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen,

ich brauche ein Tool mit dem man sich die Windows Messages tracen kann. Ich habe eine externe GUI Library, die ich nicht ändern kann, und muss zur Laufzeit die window messages tracen. Den sourcecode zu der Library habe ich leider nicht, sonst hätte ich dort debuggen können.

Kennt ihr ein Tool womit das geht, wenn möglich auch mit Filter Einstellung auf bestimmte messages.

Thema: Viele Comboboxen mit einem Event abfangen?
Am im Forum: GUI: Windows-Forms

Das ist schon klar, aber um zu wissen das dass die CheckBox 4 war sollte er das Tag Property verwenden oder von Ableiten und sich was eigenes zu basteln.

Thema: Viele Comboboxen mit einem Event abfangen?
Am im Forum: GUI: Windows-Forms

Genau so würde ich es auch machen. Und beim Initialisieren wird ich die Tag Property der Checkbox nutzen um dir zu merken welche Checkbox es ist, sodass du in der Methode die dem Event zugeordnet ist weist welche Checkbox verändert wurde.

Thema: [gelöst] Tab Event auch über Enter Taste auslösen
Am im Forum: GUI: Windows-Forms

Schau dir mal die NextControl() Methode an. Du kannst also jede Textbox an ein und das selbe callback binden, und dann dort einfach immer das nächste Control fokusieren.

Thema: Wildcard String matching => Regular Expression
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hab mal was geschrieben und das unter den Snippets veröffentlicht. Ich hab ein paar Tests dazu geschrieben und die gehen alle durch. Hoffe mal ich hab nichts vergessen. Zu finden ist es hier.

Thema: Wildcard to Regex Converter including number ranges
Am im Forum: .NET-Komponenten und C#-Snippets

Diese Wildcard search Engine kann folgendes:
* steht für jedes belibige Zeichen
? steht für ein beliebiges Zeichen
- wird für Nummernbereiche verwendet 12-132


<Mit der Klasse kann man leicht nach Mustern in Texten suchen, vorallem die Nummernbänder sind sehr hilfreich. Das token "*12-31a? findet alle Texte die gefolgt von beliebigen Zeichen sind, dann eine Zahl folgt die größer als 11 ist und kleiner als 32 gefolgt von einem a und einen einzelnen Zeichen.>


/// <summary>
    /// This class is used to use wildcards and number ranges while
    /// searching in text. * is used of any chars, ? for one char and
    /// a number range is used with the - char. (12-232)
    /// </summary>
    internal class Wildcard : Regex
    {
        #region Fields
        /// <summary>
        /// This flag determines whether the parser is forward
        /// direction or not.
        /// </summary>
        private static bool m_isForward;
        #endregion

        #region Constructors
        /// <summary>
        /// Initializes a new instance of the <see cref="Wildcard"/> class.
        /// </summary>
        /// <param name="pattern">The wildcard pattern.</param>
        public Wildcard(string pattern) : base(RegexToWildcard(pattern))
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="Wildcard"/> class.
        /// </summary>
        /// <param name="pattern">The wildcard pattern.</param>
        /// <param name="options">The regular expression options.</param>
        public Wildcard(string pattern, RegexOptions options) : base(RegexToWildcard(pattern), options)
        {
        }
        #endregion

        #region Private Implementation
        /// <summary>
        /// Searches all number range terms and converts them
        /// to a regular expression term.
        /// </summary>
        /// <param name="pattern">The wildcard pattern.</param>
        /// <returns>A converted regular expression term.</returns>
        private static string RegexToWildcard(string pattern)
        {
            m_isForward = true;
            //escape and beginning
            pattern = "^" + Regex.Escape(pattern);
            //replace * with .*
            pattern = pattern.Replace("\\*", ".*");
            //$ is for end position and replace ? with a .
            pattern = pattern.Replace("\\?", ".") + "$";
            
            //convert the number ranges into regular expression
            Regex re = new Regex("[0-9]+-[0-9]+");
            MatchCollection collection = re.Matches(pattern);
            foreach (Match match in collection)
            {
                string[] split = match.Value.Split(new char[] {'-'});
                int min = Int32.Parse(split[0]);
                int max = Int32.Parse(split[1]);

                pattern = pattern.Replace(match.Value, ConvertNumberRange(min, max));
            }

            return pattern;
        }

        /// <summary>
        /// Converts the number range into regular expression term.
        /// </summary>
        /// <param name="min">The minimum value.</param>
        /// <param name="max">The maximum value.</param>
        /// <returns>The regular expression pattern for the number range term.</returns>
        private static string ConvertNumberRange(int min, int max)
        {
            if (max < min)
            {
                throw new InvalidOperationException("The minimum value could not be greater than the maximum value.");
            }
            
            string pattern = string.Empty;
            int currentValue = min;
            int tempMax = 0;
            int radix = 1;

            while (m_isForward || 
                   radix != 0)
            {
                tempMax = GetNextMaximum(currentValue, max, radix);
                if (tempMax ≥ currentValue)
                {
                    pattern += ParseRange(currentValue, tempMax, radix);
                    if (!(!m_isForward && radix == 1))
                    {
                        pattern += "|";
                    }
                }
                radix += (m_isForward ? 1 : -1);
                currentValue = tempMax + 1;
            }

            //add a negative look behind and a negative look ahead in order
            //to avoid that 122-321 is found in 2308.
            return @"((?<!\d)(" + pattern + @")(?!\d))";
        }

        /// <summary>
        /// Gets the next maximum value in condition to the current value.
        /// </summary>
        /// <param name="currentValue">The current value.</param>
        /// <param name="maximum">The absolute maximum.</param>
        /// <param name="radix">The radix.</param>
        /// <returns>The next number which is greater than the current value,
        /// but less or equal than the absolute maximum value.
        /// </returns>
        private static int GetNextMaximum(int currentValue, int maximum, int radix)
        {
            //backward
            if (!m_isForward)
            {
                if (radix != 1)
                {
                    return ((maximum / (int)Math.Pow(10, radix - 1))) * (int)Math.Pow(10, radix - 1) - 1;
                }
                //end is reached
                return maximum;
            }
            //forward
            int tempMax = ((currentValue / (int)Math.Pow(10, radix)) + 1) * (int)Math.Pow(10, radix) - 1;
            if (tempMax > maximum)
            {
                m_isForward = false;
                radix--;
                tempMax = ((maximum / (int)Math.Pow(10, radix))) * (int)Math.Pow(10, radix) - 1;
            }

            return tempMax;
        }

        /// <summary>
        /// Parses the range and converts it into a regular expression term.
        /// </summary>
        /// <param name="min">The minimum value.</param>
        /// <param name="max">The maximum value.</param>
        /// <param name="radix">The radix form where up the value is changed.</param>
        /// <returns>The pattern which descripes the specified range.</returns>
        private static string ParseRange(int min, int max, int radix)
        {
            string pattern = string.Empty;
            int length = max.ToString().Length;

            pattern += min.ToString().Substring(0, length - radix);
            int minDigit = ExtractDigit(min, length - radix);
            int maxDigit = ExtractDigit(max, length - radix);

            pattern += GetRangePattern(minDigit, maxDigit, 1);
            pattern += GetRangePattern(0, 9, radix - 1);

            return pattern;
        }

        /// <summary>
        /// Gets the range pattern for the specified figures.
        /// </summary>
        /// <param name="beginDigit">The begin digit.</param>
        /// <param name="endDigit">The end digit.</param>
        /// <param name="count">The count of the pattern.</param>
        /// <returns>The pattern for the atomic number range.</returns>
        private static string GetRangePattern(int beginDigit, int endDigit, int count)
        {
            if (count == 0)
            {
                return string.Empty;
            }

            if (beginDigit == endDigit)
            {
                return beginDigit.ToString();
            }

            string pattern = string.Format("[{0}-{1}]", beginDigit, endDigit);
            if (count > 1)
            {
                pattern += string.Format("{{{0}}}", count);
            }

            return pattern;
        }

        /// <summary>
        /// Extracts the digit form the value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="digit">The digit.</param>
        /// <returns>The figure at the specified digit.</returns>
        private static int ExtractDigit(int value, int digit)
        {
            return Int32.Parse(value.ToString()[digit].ToString());
        }
        #endregion
    }

Schlagwörter: <Number ranges, Nummernbereiche, Wildcard>

Thema: Wildcard String matching => Regular Expression
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich schau mir das Schema mal an und werd das mal einbauen. Den Konverter stell ich dann bei den Snippet's mit rein.

Danke euch.

Thema: Wildcard String matching => Regular Expression
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe zwar eine Lösung aber irgendwie gefällt die mir nicht. Ich lese den ausdruck 12-132 aus und parse minumum und maximum. Dann mach ich darauf den Regex [0-9]{minumum ,maximum}. Damm schau ich mich isMatch ob es Matched und im Falles es ist so ein Ausdruck enthalten, prüfe ich noch ob der Value innerhalb min und max ist.

Wenn einem was besseres einfällt immer her damit.

Thema: Wildcard String matching => Regular Expression
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi zusammen,

ich habe folgendes Problem. Ich muss strings vergleichen aber mit Wildcards.

? einzelnes Zeichen
* mehere einzelne Zeichen
- nummernbänder (12-15)

zu ?: Das kann in . konvertiert werden
zu *: Das kann in .* konvertiert werden

Am Anfang des Pattern noch ein "^" und am ende ein "$" hibzufügen.
Soweit so klar. Aber wie konvertiere ich nun wenn man nach "Bla_12-14" oder "1-200" sucht? Da streikt mein Kopf leider...

Thema: VS2008-Debugger: Edit & Continue geht nicht mehr
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Das Geheimnis ist gelüfftet. Wie es dazu kam ist mir zwar ein Rätsel, aber jetzt funzt es wieder. Das hier wurde mir geholfen. Bei mir war eine der 3 Umgebungsvariablen gesetzt und auf 1. Die habe ich auf 0 gesetzt, Studio neu gestartet (eventuell Rechner neu starten) und schon gings wieder.

Thema: VS2008-Debugger: Edit & Continue geht nicht mehr
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen,

seit geraumer Zeit habe ich ein Problem mit Edit und Continue beim Debuggen. Ich debugge ein Assembly welches in einem Framework integriert ist. Daher beim debuggen wird eine externe Assembly (*.exe) gestartet die dann irgendwann die dll von mir lädt. Debuggen kann ich ohne Probleme. Doch "früher" konnte ich mal den source code ändern und einfach weiter debuggen ohne jedesmal neu die Assembly zu übersetzen. Daher der debugger hat das just in time gemacht. Neuerdings meldet er mir aber immer folgendes:

Zitat
Changes are not allowed when the debugger has been attached to an already running process or the code being debugged was optimized at build or run time.

Edit and continue ist in den debug settings angeschalten. Ich attatche mich auch nicht wirklich an den Prozess, sondern der prozess wird beim debuggen gestartet, kann man im Projekt unter den debug settings einstellen. Code optimization ist auch abgeschalten. Ich weiß nicht mehr woran das noch liegen kann.

Das Problem ist das es mit einmal nicht mehr ging, ohne das ich bewusst etwas geändert habe. Weiß einer von euch woran das liegen kann?

Thema: Mehrere Textboxen 1 Funktion
Am im Forum: GUI: Windows-Forms

Am besten aus meiner Sicht wäre es dir eine eigene Textbox Control zu erstellen indem du dich von einer Standard TextBox ableitest und dann dort das OnTextChanged Event überschreibst. Dann musst du gar nichts mehr machen, sondern kannst die Textboxen so verwenden.

Thema: RichTextBox Paint vorübergehend verhindern
Am im Forum: GUI: Windows-Forms

Besten Dank herbivore, das war genau das was ich gesucht habe!

Thema: RichTextBox Paint vorübergehend verhindern
Am im Forum: GUI: Windows-Forms

Hallo zusammen, ich habe ein Problem mit einer richTextBox und wollte wissen ob es dafür eine Lösung gibt.
In der RichTextBox werden programatisch Selectionen verändert, sowie Hintergrund und Vordergrundfraben. Das dauert manchmal 1-2 sekunden. Kann ich in der zeit das neu zeichnen der RichTextBox verhindern?

Das Problem ist nämlich das die in dieser Zeit sehr flackert.

Thema: Assert.AreEqual mit Listen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Soweit ich weiß gibt es sowas im .NET framework noch nicht. Du musst schon selber durch iterieren, oder ableiten und dir ne eigene Equal implementieren.

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Habs kurz getestet scheint sehr gut zu funktionieren. Ich baue es jetzt mal ein und geb dir das feedback.

Danke schon mal auf jeden Fall :-)

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

@ErfinderDesRades super Idee. Wenn du es fertig hast kannst du es bitte hier posten.

@der-schlingel: Die Idee hatte ich auch erst, allerdings ist es so das den Logger sehr viele Entwickler nutzen. Daher müsste jetzt jeder seine tests ändern.
Derzeit habe ich es so das man am Logger per Methode den Hook mechanismum initialisiert und dann per methode wieder freigibt (ende des tests).

Wenn nun noch das global Hook auf das Window Handle begrenzt wird dann passt das schon. Wer den Logger benutzt und auf den Pause Mechanismum verzichten will der braucht einfach nicht die Mehtod init aufzurufen. Wer schon muss es dann auch wieder frei geben.

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

@der-schlingel. Das NUnit Framework darf ich nicht verändert. Das muss so bleiben. Daher kann das dort nicht rein. Und im Client hat es erst recht nichts zu suchen...

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Weil das nicht geht herbivore. Ich glaub ich muss noch ein bisschen tiefer graben das es Verständlich für euch wird.

Client = Die zu testenede Anwendung
AutomationLibrary = Die library die GUI tests ermöglicht (maus, key, events etc.)
NUnit Test = enthält die Tests die die AutomationLibrary nutzen um den Client zu testen

NUnit Framework = GUI startet und man wählt die/den test aus.

Dann startet der Test den Client und testet Ihn. Das heißt der Test müsste das Application.Run aufrufen. Das wiederrum heißt aber das jeder der tests schreibt und den Logger benutzen will selber den HookManager initialisieren müsste. Das möchte ich nicht.

Daher der Logger sollte das selber übernehmen, auch das abmelden. Das hab ich jetzt so gemacht das der verwender der Klasse am ende des tests RealseHook aufrufen muss. dann wird die Form geschlossen und der Thread für damit auch beendet. Ob das jetzt schön ist lässt sich sicherlich streiten. Aber es funzt auf jeden Fall erstmal auf meinem Rechner.

Wenn einer eine bessere idee hat dann immer her damit.

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Hallo herbivore,

also wenn ich im ctor der statischen Klasse die Form mit Application.Run starte geht das schief weil diese dann blockiert. Form.Show habe ich nicht probiert.

Wenn ich einen Thread erstelle und in der dem thread zugeteilten Methode Application.Run(form) aufrufe funktioniert das. Daher die Form bekommt auch die Hooks und feuert im falle der richtigen Taste ein event, das die statische Klasse empfängt. Diese blockiert dann.

[Edit]: Nachtrag: Wenn ich die Form mit .Show aufrufe dann funktioniert der hook mechanismus nicht mehr. Daher die Form bekommt die Hook Events der HookManager Klasse nicht mehr mit.

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Die klasse muss statisch bleiben. Das hat mehrere Gründe auf die ich hier aber nicht näher eingehen möchte.

Ich geh mal ein bisschen in die tiefe um das besser zu erklären. Die statische Klasse ist eine Logging Klasse und dient dazu logs in Files zu schreiben und bisschen was rundrum noch. Die eigentliche Anwendung führt GUI tests aus und nutzt diese statische Logger Klasse um log ausgaben dort rein zu schreiben.

Die eigentliche Anwenundung (GUI Tests) soll unterbrochen werden (Pause). Die Idee dahinter ist da die Logger Klasse sehr oft angesprochen wird sollte diese einfach die Information bekommen ob die pause taste gedrückt wurde oder nicht.

Wenn nun wieder geloggt wird, einfach checken ob die Pause Taste gedrückt wurde und dort blockieren. MessageBox bzw. dort dann auf Ok klicken und weiter gehts.

1.Problem: Das aufräumen. Die eigentliche Application muss den hook beenden. => nicht gut. Das sollte der FileLogger selber machen, aber wie.

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Ja es muss unbedingt ein globaler Hook sein, sonst hätte ich ja nicht gefragt ;-)

Das eine Problem habe ich jetzt gelöst. Die Hook Klasse soll nichts weiter machen als auf eine bestimmte Taste zu hören, und dann ein Event zu feuern. Das habe ich jetzt so gemacht.

Keine Konsolenanwendung sondern eine Form. Form aus der Taskbar entfernt und visible = false gesetzt. Nun in der form den HookManager.KeyDown registriert und auf eine bestimme Taste gehört. Im Falle die Taste wurde gedrückt, dann einfach ein selbst definiertes Event feuern. Soweit so gut.

Jetzt habe ich aber ein anderes Problem. Und zwar wird die Form in einem statischen Konstruktor erzeugt. Die dazugehörige statische Klasse benötigt einfach die Information ob diese Taste gedrückt wurde oder nicht. Wenn ich jetzt aber mit Application.Run(form) die Form starte dann blockiert diese. Daher ich muss dort irgendwie einen neuen Thread bzw. Process starten der die HookForm in einem separaten Process/Thread startet. Leider weis ich nicht wie.


m_HookApplication = new HookApplication();
Application.Run(m_HookApplication);

Das Application.Run(m_HookApplication) muss ich auf einen anderen Thread/Process auslagern. Ich könnte jetzt dort einfach einen anderen Thread starten. Dem Thread einfach die Form übergeben, und dort mit Application.Run(m_HookApplication) die form starten. Die Frage ist ob das praktikabel ist. Was sagt ihr?

Noch eine kleine Frage am Rande dazu. Eine Statische Klasse hat leider keine Destruktur, daher kann ich den Thread nicht sauber beenden. Das heißt der Verwender der statischen Klasse muss selber eine Methode an der statischen Klasse aufrufen um sie korrekt zu beenden. Habt ihr dafür Ideen?

Thema: WinApi Hook in der Konsole
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich hab mal wieder ein Problem bei dem ich nicht weiter komme. Ich möchte in einer Konsolen Anwendung die ein Key abfangen bei dem ich eine bestimmte Aktion ausführen will.

Bei einer Forms Anwendung ist das ganze keine Problem. In Processing Global Mouse and Keyboard Hooks in C# gibt es eine fertige Library mit der das möglich ist.

Irgendwie hab ich aber kein Plan wie ich eine MessageQueue für eine KonsolenAnwendung starte. Weiß einer von euch rat?

Danke im voraus.

Thema: Monitoring aller .NET Objekte eines Prozesses
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Jepp hier scheint ein sehr hilfreicher Thread zu sein.