In C # Winforms gibt es eine Möglichkeit, alle Steuerelemente mit einem gepunkteten Rahmen zu versehen und bei der Auswahl bestimmter Steuerelemente zur Laufzeit Griffpunkte anzuzeigen.

8

Ich arbeite in einem Team, das an einer IDE ähnlich Visual Studio arbeitet, um benutzerdefinierten Winform-Code für unsere lokalen Clients zu entwickeln. In unserem Code haben wir die Benutzersteuerelemente außer Kraft gesetzt, um unsere Aufgaben zu vereinfachen, aber die meisten unserer Steuerelemente sind von grundlegenden Winform-Steuerelementen in Winform abgeleitet.

Ich benötige derzeit Hilfe bei der Implementierung einer gepunkteten Umrandung um alle unsere Steuerelemente herum, mit der Art von Grip-Punkten, die von Visual Studio bereitgestellt werden.

Nicht ausgewählte Steuerelemente

Ausgewählte Steuerelemente

Diese Funktion ist sehr gefragt, da sie bei der Ausrichtung ohne Kompensation auf visuelle Richtlinien helfen kann.

Wir haben derzeit einen dunklen Rahmen um alle Steuerelemente implementiert, indem Sie

verwenden %Vor%

Damit wird ein schwarzer Rahmen um die generierten Controls gelegt, der im obigen Code-Snippet eine ComboBox ist.

Ein Mitglied hat uns auf die Verwendung von Margins und Padding hingewiesen, wie in der Microsoft-Dokumentation gezeigt: Ссылка

Aber das ist meistens Theorie und scheint nicht viel zu helfen. die nächste Sache, die gekommen ist, um dieses Problem zu lösen, war bisher ein Online-Skript "> CodeProject Link :

%Vor%

Ich bin überrascht, dass ich bisher keine enge Übereinstimmung mit meiner Suche gefunden habe, vielleicht verwende ich die falsche Terminologie, da ich mich erst kürzlich mit der Programmierung in diesem Bereich beschäftigt habe.

Ich glaube, dass zukünftige Online-Suchen von Vorteil sein werden, wenn dieses Problem gelöst wird. Wir freuen uns auf Hinweise, die Erfahrungen mit diesem Problem haben. Ich schätze jede Hilfe in dieser Richtung.

    
Ganesh Kamath - 'Code Frenzy' 14.10.2016, 18:06
quelle

4 Antworten

1
  

Ich arbeite in einem Team, das an einer IDE ähnlich wie Visual Studio arbeitet ....

Die Entwicklung eines benutzerdefinierten Formular-Designers ist keine triviale Aufgabe und erfordert viel Wissen und viel Zeit. Ich glaube, die beste Lösung, die Sie verwenden können, ist der Windows-Formular-Designer.

Es geht nicht nur darum, Auswahlrahmen zu zeichnen:

  • Jedes Steuerelement verfügt über einen eigenen Designer mit bestimmten Funktionen, z. B. einige Steuerelemente wie MenuStrip hat einen eigenen Designer, mit dem Sie Elemente auf dem Designer hinzufügen / entfernen können.
  • Steuerelemente können bestimmte Größen- und Positionierungsregeln aufweisen. Zum Beispiel haben einige von ihnen eine automatische Größe wie TextBox oder angedockte Steuerelemente können nicht mit der Maus neu positioniert werden usw.
  • Komponenten sind auf Ihrem Formular nicht sichtbar. Sie müssen diese möglicherweise bearbeiten.
  • Einige Eigenschaften sind Entwurfszeiteigenschaften.
  • Einige Eigenschaften werden mithilfe von Extender-Providern hinzugefügt, und Sie müssen zusätzliche Aufgaben ausführen, um sie in Ihrem benutzerdefinierten Designer zu ändern.
  • Und viele andere Überlegungen.

Lösung 1 - Hosten von Windows Forms-Designer

Weitere Informationen zur Entwurfszeitarchitektur finden Sie unter Entwurfszeitarchitektur . Um Windows Forms Designer in Ihrer Anwendung zu hosten, müssen Sie einige Schnittstellen wie IDesignerHost , IContainer , IComponentChangeService , IExtenderProvider , ITypeDescriptorFilterService , IExtenderListService , IExtenderProviderService implementieren.

Für einige gute Beispiele können Sie sich ansehen:

Lösung 2 - Zeichnungsauswahlrahmen in einem transparenten Bereich

Ich empfehle zwar dringend, die erste Lösung zu verwenden, aber nur zu Lernzwecken, wenn Sie einen Auswahlrahmen um Steuerelemente zeichnen möchten. Sie können die Formulare, die Sie bearbeiten möchten, dem Hostformular hinzufügen und dann ein transparentes Feld einfügen über dem Formular. Behandle Click event von transparentem Panel und finde das Steuerelement unter der Mausposition und zeichne einen Auswahlrahmen um das transparente Panel herum:

Im Beispiel habe ich gerade ein transparentes Panel erstellt und einen Auswahlrahmen gezeichnet. Es ist nur ein Beispiel und das Durchführen der Größenanpassung und Positionierung ist außerhalb des Anwendungsbereichs des Beispiels. Es wird nur gezeigt, wie Sie einen Auswahlrahmen um die Steuerelemente herum zeichnen können. Sie können die Idee auch verwenden, um ein SelctionBorder -Steuerelement zu erstellen und die Dimensionierungs- und Positionierungslogik in das Steuerelement einzukapseln. Statt die Rahmen zu zeichnen, fügen Sie eine Instanz von SelectionBorder control dem transparenten Bereich hinzu und ändern in seinen Größen- und Positionsereignissen die entsprechenden Werte Kontrollkoordinaten.

Bitte beachtet, dass es nur ein Beispiel ist und in einer echten Designerumgebung sollten Sie viele wichtige Dinge beachten.

Transparentes Panel

%Vor%

Host-Formular

%Vor%     
Reza Aghaei 24.10.2016, 00:01
quelle
2

Eine gewisse Vorsicht wäre hier angebracht. Die Modellierung eines UI-Designers nach dem Winforms-Designer ist eine einfache Entscheidung. Die tatsächliche Implementierung ist ein Job, der Sie viele Monate beschäftigen kann. Zu entdecken, dass man außerhalb der Kontrollgrenzen nicht malen kann, ist in der Tat das allererste Hindernis, auf das man stoßen wird, viel mehr so.

Die erste Abkürzung, die Sie in Betracht ziehen könnten, besteht darin, Platzhalter für die Steuerelemente zu zeichnen, damit Sie nicht von der Control-Klasse abhängig sind. Funktioniert gut, solange es nicht so genau wie das echte Steuerelement aussehen muss (d. H., WYSIWYG aufgeben) und Sie müssen die Größe nicht ändern.

Aber Sie werden das sicherlich abtun. Sie müssen dann dasselbe tun, was der Winforms-Designer tut, Sie müssen ein transparentes Fenster auf der Entwurfsoberfläche überlagern . Sie können auf diesem Overlay alles zeichnen, was Sie möchten, und es bietet eine automatische Maus- und Tastaturisolierung, so dass die Steuerung selbst die Design-Time-Interaktion völlig ignoriert. Beispiele für ein solches Overlay finden Sie in diesem Post und diesen Beitrag .

Last but not least ist es erwähnenswert, dass Sie den vorhandenen Winforms-Designer auch in Ihren eigenen Projekten nutzen können. Sie müssen IDesignerHost implementieren. Und ein paar mehr, leider ist das Abstraktionslevel ziemlich hoch und die MSDN-Dokumentation ist eher kurz. Am besten arbeiten Sie mit einem Beispiel, das einen Designer mit vollem Funktionsumfang zeigt. Dieser KB-Artikel enthält den Link. Code ist ausgezeichnet und gut dokumentiert, Sie erhalten einen fast vollständigen Designer mit Toolbox und Eigenschaften-Fenster, das den Entwurf von / nach XML de / serialisiert und C # - und VB.NET-Code generieren kann. Schaue über die grelle Benutzeroberfläche hinaus, es aktiviert keine visuellen Stile und die Farbauswahl ist die Art, die ich machen würde :) Es hübsch zu machen war nicht der Punkt des Codebeispiels.

    
Hans Passant 23.05.2017 11:53
quelle
0

Ich habe I Windows Form Application erstellt Ich hoffe, dies wird Ihnen helfen

BackEnd C # -Code

%Vor%

Designer-C # -Code

%Vor%

  

Machen Sie GroupBox1 backgroundcolour 'Transparent', weil ich auf Form nicht auf Zeichnen zeichne   GroupBox

Sie können auch Rahmen für ausgewählte Steuerelemente erstellen, indem Sie if (c ist ComboBox)

hinzufügen

oder if (c.Name == "comboBox1") in foreach Schleife

!! Ändern Sie die Farbe nach Ihren Bedürfnissen!

    
Zulqarnain Jalil 20.10.2016 12:17
quelle
0
%Vor%     
Frank Hagenson 18.10.2016 03:52
quelle