Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung, wie FormDragger Form Dragger in C# implementiert

Ausführliche Erklärung, wie FormDragger Form Dragger in C# implementiert

Y2J
Y2JOriginal
2017-04-22 10:33:381579Durchsuche

In diesem Artikel wird hauptsächlich die C#-Komponente FormDragger ausführlich vorgestellt, die einen gewissen Referenzwert hat.

Anwendbar: .net2.0+ Winform-Projekt

Einführung:

Software, die den Schwerpunkt auf die Benutzeroberfläche legt, wie QQ und Thunder, unterstützt das Ziehen an mehreren Stellen innerhalb des Fensters. Sie können das Fenster verschieben, ohne dazu gehen zu müssen Klicken Sie auf die obere Titelleiste und ziehen Sie sie per Drag-and-Drop. Mit dieser Komponente können Sie sie per Drag & Drop verschieben. Schauen Sie sich zunächst den Effekt an:

Ausführliche Erklärung, wie FormDragger Form Dragger in C# implementiert

Zu den Orten, die gezogen werden können, gehören unter anderem:

  • Behälter wie z als Formular, Panel, GroupBox, TabControl usw. Der leere Bereich des Steuerelements;

  • Der leere Bereich der Menüleiste, Symbolleiste, Statusleiste und anderer Leisten, wie z sowie ungültige Elemente;

  • Label, PictureBox, ProgressBar und andere Steuerelemente, die normalerweise nicht mit der Maus interagieren

  • Alle ungültigen Steuerelemente ( Aktiviert ist falsch);

Grundsätzlich können Sie es überall hin schleppen, wo Sie denken, dass es schleppbar sein sollte.

Verwendung:

Schauen Sie sich zuerst die öffentlichen Mitglieder an:

//拖拽器开关
bool Enabled { get; set; }
//排除列表。可向其中添加或移除控件实例,处于列表中的控件不接受拖拽
List<Control> ExcludeControls { get; }
//事件:准备拖拽时发生,可用e.Cancel = true取消拖拽,e还携带其它信息
event EventHandler<FormDraggingCancelEventArgs> Dragging;
//事件:拖拽器开关状态改变后
event EventHandler EnabledChanged;

Es ist sehr einfach zu verwenden, jederzeit und überallFormDragger .Enabled = true/false kann die Drag-and-Drop-Funktion ein- und ausschalten. Sie kann beispielsweise in der Hauptfunktion aktiviert werden, nachdem alle selbst erstellten Formulare fertiggestellt wurden Im Programm können Sie jedoch wie bei MessageBox verschiedene Dialogfelder (z. B. das Dialogfeld „Datei öffnen“) und andere vom System bereitgestellte Formulare nicht ziehen, was jedoch nicht möglich ist Im Plan wurde ein DialogDragger.cs implementiert, der zum Ziehen von Systemdialogen verwendet wird. Es ist jedoch bekannt, dass es ein Problem mit dem Farbauswahldialogfeld ColorDialog gibt, weshalb es vorerst nicht integriert ist Ich werde es später aktualisieren, wenn es notwendig und gelöst ist. Es wird empfohlen, es anzusehen. Was das Meldungsfeld betrifft, können Sie es auch auswählen. Da es hausgemacht ist, kann es gezogen werden.

Bei Steuerelementen, die Drag-and-Drop-Regeln anwenden, kann die Meldung zum Klicken mit der linken Maustaste (z. B. MouseDown) nicht erreicht werden. Da sie abgefangen wurde, wurde dies registriert Wenn Sie möchten, dass ein ziehbares Steuerelement nicht gezogen wird, z. B. ein Bildfeld, und Sie möchten, dass es die Funktion eines „Hyperlinks“ hat und die registrierte MouseDown-Ereignisverarbeitungsmethode ausführt, wenn Sie darauf klicken, Dann gibt es zwei Möglichkeiten, Ausnahmen zu erreichen:

1. Fügen Sie das Steuerelement zur Ausnahmeliste hinzu: FormDragger.ExcludeControls.Add(pictureBox1);//Beachten Sie, dass hier die Steuerelementinstanz akzeptiert wird, nicht das Steuerelement type;
2 . Registrieren Sie das Ereignis FormDragger.Dragging. In der Ereignisverarbeitungsmethode verfügt das eingehende e über ein Control-Attribut, das das angeklickte Steuerelement darstellt, sodass Sie bestimmen können, ob e.Control das Steuerelement ist, das Sie ausnehmen möchten. Wenn ja, setzen Sie e.Cancel = true. Darüber hinaus enthält e auch andere Informationen wie Mausposition, Koordinatentyp usw.
Es gibt Beispiele für die oben genannten Szenarien Ihre Referenz.

Prinzip:

Verwenden Sie Application.AddMessageFilter, um dem Programm einen Nachrichtenfilter hinzuzufügen, die an das Programmformular gesendete Nachricht mit der linken Maustaste abzufangen und zu verarbeiten. Wenn die Logik erfüllt ist, wird die Nachricht abgefangen und die Nachricht zum Klicken auf die Titelleiste wird an das Formular gesendet, in dem sich das Steuerelement befindet, sodass das System beim Klicken auf das Steuerelement davon ausgeht, dass es sich um die Titelleiste des Formulars handelt angeklickt wird. Für Einzelheiten zur Bearbeitung wenden Sie sich bitte an die untenstehende Adresse.

Vorschlagsort:
github.com/ahdung/FormDraggerDemo [Priorität]

coding.net/u/ahdung/p/FormDraggerDemo/git

git.oschina .net/ahdung/FormDraggerDemo

Ein Tester wurde in den Plan geschrieben, genau wie der Screenshot. Sie können ihn gerne herunterladen und erleben.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie FormDragger Form Dragger in C# implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn