UserControl abfangen, ob Button geklickt ist

DrMueller

Erfahrenes Mitglied
Hallo Leute,

ich habe folgende Situation:
Auf einem Form kann ich x UserControls haben. Diese lassen sich mit DragnDrop hin und her bewegen.
Klappt soweit alles gut, allerdings ist es recht mühsam, wenn jeder Linksklick auf das Control gleich das Draggen auslöst. Daher habe ich oben links beim Control eine kleine Textbox gemacht, es sollte nur gedraggt werden, wenn diese den Fokus.

Nun dachte ich, dass ich hier:
Code:
        void c_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                Abschnitt a = (Abschnitt)sender;
                if (a.ActiveControl.Name == "cmdDragDrop")
                    a.DoDragDrop(sender, DragDropEffects.Move);
            }
        }

Einfach den Button abfrage, und wenn dieser Aktiv ist, draggen.
Leider geht dies nicht, denn mein UserControl kennt nichts, was wie KeyPreview oder so was aussieht. Daher wird bei Mousdown auch nicht geschossen.

Gibt es da eine einfache Lösung? Ich habe einige sehr komplizierte Konstruktionen im Internet gesehen, allerdigns meine ich, es müsste doch da eine Lösung geben.
Ich könnte auch was merkwürdiges selber zusammen basteln, aber da es mir auch um den Lerneffekt geht, hat evtl. jemand eine saubere Idee.


Oder gibt es hier gar eine ganz andere Lösung?


Wie immer vielen Dank im Voraus.

Müller Matthias
 

DrMueller

Erfahrenes Mitglied
Heho, ich hab das Thdem Button mal soweit ausgeklammert, trotzdem mag das Drag n Drop nicht.

Wenn der Benutzer ein neues Control hinzufügt, wird dies wie folgt gemacht:
Code:
                    Abschnitt c = new Abschnitt();
                    c.Name = getNextAbschnittName();
                    c.MouseDown += new MouseEventHandler(c_MouseDown);
                    c.Init(f.Type, f.AbschnittName);
                    this.Controls.Add(c);

C_Mousedown sieht wiederum wie folgt aus:
Code:
        void c_MouseDown(object sender, MouseEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("C_MouseDown");
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                Abschnitt a = (Abschnitt)sender;
                //if (a.DragMode)
                    a.DoDragDrop(sender, DragDropEffects.Move);
            }
        }


Anscheinend gibt es aber, wenn mehrere dieser Controls hinzugefügt werden, Probleme mit dem Mousdown. Ich habe beim Control selber und auch beim Form_Mousedown debugs hinzugefügt, manchmal schiesst gar keiner der dreien.

Hat jemand eine Idee, wann so was passieren kann? Es scheint unregelmässig aufzutreten.
 

DrMueller

Erfahrenes Mitglied
Wie üblich, schon macht mans richtig, klappts:
Ein UserControl kennt anscheinend keinen KeyPreview, daher hat das Mousedown auf dem Label nicht geschossen.
Als erster Versuch habeich dann dieses auf disable gesetzt, allerdngs konnte ich dann die Farbe nicht mehr ändern.
Daher ein eigenes CustomLabel gemacht, das hat allerdings auch Probleme gemacht.

Jetzt painte ich einfach per drawString den Text drauf :)
 

Neue Beiträge