Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

17.06.2010 - 12:19 Uhr

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

15.06.2010 - 12:18 Uhr

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.

09.06.2010 - 07:20 Uhr

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.

03.06.2010 - 22:39 Uhr

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.

02.06.2010 - 21:52 Uhr

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.

01.06.2010 - 11:37 Uhr

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.

31.05.2010 - 19:24 Uhr

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.

31.05.2010 - 07:31 Uhr

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.

27.05.2010 - 10:27 Uhr

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.

25.05.2010 - 08:02 Uhr

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.

25.05.2010 - 08:00 Uhr

**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>

23.05.2010 - 09:31 Uhr

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.

21.05.2010 - 12:58 Uhr

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.

21.05.2010 - 11:32 Uhr

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...

19.05.2010 - 09:26 Uhr

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.

18.05.2010 - 08:31 Uhr

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:

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?

12.05.2010 - 13:48 Uhr

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.

04.05.2010 - 15:49 Uhr

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

04.05.2010 - 15:06 Uhr

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.

05.04.2010 - 18:08 Uhr

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.

23.03.2010 - 15:10 Uhr

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 😃

23.03.2010 - 11:14 Uhr

@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.

23.03.2010 - 10:44 Uhr

@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...

23.03.2010 - 10:43 Uhr

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.

23.03.2010 - 10:04 Uhr

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.

23.03.2010 - 10:01 Uhr

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.

23.03.2010 - 09:32 Uhr

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?

22.03.2010 - 21:46 Uhr

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.

09.03.2010 - 08:52 Uhr

Jepp hier scheint ein sehr hilfreicher Thread zu sein.

09.03.2010 - 07:30 Uhr

Hallo zusammen,

ich suche nach folgendem. Ich möchte alle Objekte die der Garbage Collector "kennt" angezeigt bekommen. Gibt es dafür eventuell ein Tool mit dem das geht?

02.03.2010 - 14:14 Uhr

Jo voraus natürlich.

Die Property hatte ich bereits gefunden, aber die ist es nicht.

Wenn dem Projekt ein benutzerdefiniertes Tool zugeordnet wurde, können Sie mit der CustomToolNamespace-Eigenschaft den Namespace angeben, der dem mit dem benutzerdefinierten Tool generierten Code zugeordnet werden soll. Wenn Sie einen Wert für die CustomToolNamespace-Eigenschaft angeben, wird mit dem Tool generierter Code in den angegebenen Namespace gesetzt

Das muss man doch irgendwie umbiegen können....

02.03.2010 - 13:21 Uhr

Hallo zusammen,

ich habe in einer Solution mehrere resx Files welche in der Assembly eingebettet werden. Der Namespace richtet sich dabei nach dem Default Namespace gefoglt von der Ordner Struktur in der Solution. Kann man das irgendwie umbiegen, daher im resx file selber angeben welchen Namespace es unterliegen soll? Hab dazu leider nichts gefunden, auch aufgrund der Tatsache das mir kein konkreter Suchbegriff einfällt.

Danke im voraus

08.02.2010 - 08:25 Uhr

Der sender eines Events ist bei Controls oft derjeniger der das Event auslöst. Daher caste das object sender in deiner entsprechendes Controls. Dort kannst du dann feststellen welche Textbox du jetzt in der Hand hast.

26.01.2010 - 23:21 Uhr

Das Plugin funktioniert nicht. Das wirft immer Exceptions.
Siehe hier und hier.

26.01.2010 - 21:49 Uhr

Das ist ja sensationell. Besten Dank DevHB.
Ich werde es morgen gleich mal ausprobieren und dann hier posten.

26.01.2010 - 15:09 Uhr

Hallo ich suche ein gutes kostenloses Tool um aus schon bestehenden .NET Code (source code oder Assemblies) Sequenzdiagramme erstellen zu können. Wir nutzen derzeit den Enterprise Architekt, aber der kann das meines Erachtens nach nicht, der kann zwar welche erstellen, aber nicht aus Code. Wenn ich mich irre dann bitte einen kleinen Hinweis wie das geht.

Danke im voraus.

26.01.2010 - 15:05 Uhr

Zum oberen Problem musst du dir ein Event definieren bzw. Callback ist ja praktisch das selbe, und wenn der Thread endet dann per Invok das Msg schließen.

Zum anderen Problem. Ich würde das ohne den BGW machen, da du so alles in der Hand hast. Einfach eine Form öffnen dort ein Thread anlegen und im Thread die Progressbar via Invoke() updaten. Ist der Thread beendet, daher die dem Thread zugeteilte methode ist beendet, dann einfach die Form schließen, natürlich wieder per Invoke, da du die noch im nicht GUI thread befindest.

26.01.2010 - 10:46 Uhr

Kannst du die Frage noch mal so formulieren das ich sie auch verstehe 😃 ?

26.01.2010 - 09:32 Uhr

Du must den Lookahead HINTEN einbauen, heißt dann negativer Look Behind.

(?<!pattern)

25.01.2010 - 11:09 Uhr

Danke für den Input. Um das Kalender Control mache ich auch einen großen Bogen, da dieses ding echt scheiße ist. Wie schon von Jack erwähnt ist eine personalisierung nur über die API möglich, und das nervt gewaltig.

Ich bau mal was eigenes und wenn es anschaubar ist werd ich es mal posten.

25.01.2010 - 09:04 Uhr

Naja scwierig zu definieren. Es sollte alle tage eines Monats enthalten. Dann sollte es in den Spalten von bis Zeit spalten enthalten, vielleicht noch optionale wie Ort etc.

Wie man halt einen Dienstplan erstellt. Ich bin fast davon überzeugt das ich mir das selbst bauen muss, was auch kein großes Problem ist, nur wollt ich vorher mal fragen, eventuell gibt es ja sowas doch schon...

Ich such mal ein Bild raus, das es ungefähr wiedergibt...

25.01.2010 - 08:51 Uhr

Hallo zusammen,

ich bin grad dabei einen Dienstplaner zu schreiben wobei die ganze Logic schon soweit steht. Nun suche ich nach einer schönen Monatsanzeige in der man die Zeiten eintragen kann. Eventuell gibt es sowas schon fertig, ansonsten müsste ich mir das mit der ListView ider einem DataGridView zusammen bauen.

Auf CodeProject habe ich nichts richtiges gefunden bzw. mir fehlt der geeignete Suchbegriff.

22.01.2010 - 20:08 Uhr

Sag mal hast du überhaupt die posts von den anderen hier gelesen?

22.01.2010 - 07:24 Uhr

Das Problem hat herbovire doch genau Beschrieben. Koppel doch mal das MouseLeave Event ab, dann wirst du sehen das deine Form aufgeht.

Wenn du es dennoch so haben möchtest das bei Verlassen des Labels die Form nicht mehr angeziegt wird, musst du das Fenster an einer anderen Mouse Position initialisieren. Schau dir auch mal Hide() an der Form an, möglichweise ist das in deinem Fall besser geeignet, da du die Form immer wieder neu erstellst, und schließt und neu erstellst und ....

21.01.2010 - 14:44 Uhr

Hallo zusammen,

ich hab mir ein PlugIn für den Reflector besorgt. SequenceViz
Leider funktioniert das bei mir nicht. Ich hab wir im Beispiel auch mal einfach das ZedGraphControl geladen und wollte auch die Methode HandlePanCancel():Void als Sequenzdiagramm darstellen. Leider kommt bei mir immer eine Exception?

Weis einer von euch woran das liegt bzw. wie ich das beheben kann?

Object reference not set to an instance of an object.

System.NullReferenceException

at Reflector.Sequence.Settings.IgnoredMethodList() in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\Settings.cs:line 46
at Reflector.Sequence.Rules.IsValidMethod(String methodName) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\Rules.cs:line 22
at Reflector.Sequence.Rules.IsValidCall(Object insOperand) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\Rules.cs:line 66
at Reflector.Sequence.MethodData.AddNewCall(String typeName, IMethodDeclaration methodDefinition, Object callDefinition, String startMethod) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\MethodData.cs:line 49
at Reflector.Sequence.InstructionDataPopulator.ParseMethodBody(ITypeReference typeReference, IMethodDeclaration method, String startMethod) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\InstructionDataPopulator.cs:line 138
at Reflector.Sequence.InstructionDataPopulator.BuildGraphFromMethod(IMethodDeclaration method) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\InstructionDataPopulator.cs:line 60
at Reflector.Sequence.DiagramViewerContainer.Translate() in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\DiagramViewerContainer.cs:line 85
at Reflector.Sequence.DiagramViewerContainer.OnParentChanged(EventArgs e) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\DiagramViewerContainer.cs:line 50
at System.Windows.Forms.Control.AssignParent(Control value)
at System.Windows.Forms.Control.ControlCollection.Add(Control value)
at System.Windows.Forms.Control.ControlCollection.AddRange(Control[] controls)
at J.ý()
at J.ý(IWindow A_0)
at ¨.(String A_0)
at ¨.ý.ý(Boolean A_0)
at Reflector.Sequence.OpenSequencePackage.OnOpenSequenceClick(Object sender, EventArgs e) in E:\Code\LiveSequence\Src\trunk\LiveSequence.Reflector\OpenSequencePackage.cs:line 72
at x..ý(EventArgs A_0)
at x..()
at x..ý.(EventArgs A_0)
at System.Windows.Forms.MenuItem.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Command.DispatchID(Int32 id)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TreeView.WndProc(Message& m)
at H.ý(Message& A_0)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

.NET Reflector 5.1.6.0
.NET Framework 2.0.50727.3603
Microsoft Windows NT 5.1.2600 Service Pack 3
Culture: en-US (de-DE)

[AssemblyCache]
"%SystemRoot%\Microsoft.net"
"%ProgramFiles%\Reference Assemblies"
"%ProgramFiles%\Microsoft.net"
"%ProgramFiles%\Microsoft Silverlight"

[AssemblyManager]
"D:\Tools\Reflector\SequenceViz\ZedGraph.dll"

[WindowManager]
X="2038"
Y="269"
Width="480"
Height="600"
Pane="1120"
Maximized="true"

19.01.2010 - 14:44 Uhr

Arrays gehören in die Mottenkiste, es sollten ab .NET 2.0 nur noch generische Listen verwendet werden, zumindest meiner Meinung nach.

19.01.2010 - 00:26 Uhr

Ich hab das Problem nicht einmal verstanden... 😦

18.01.2010 - 16:30 Uhr

Hallo macke_a,

deine Informationen sind bisschen wenig um dir gezielt zu helfen.
Wo willst du denn die Daten Seitenweise anzeigen? Hat deine Textbox den Scrollbars oder keine?

Das Problem bei SelectionStart ist das wie du selber geschrieben hast deine Zeilen mal 20 Zeichen haben können mal aber auch nur 10. Also kannst du das keine feste länge selektieren.

Was dir helfen könnte ist die RichTextBox. MSDN

Speziell dort die GetFirstCharIndexFromLine(), GetFirstCharIndexOfCurrentLine() und GetLineFromCharIndex()...

15.01.2010 - 13:21 Uhr

Dann mach das was muntablues gesagt hat.
Leite von control ab, überschreib dort das OnPaint und häng dich da an die Event handler.