4

Ist es möglich, eine GroupBox, die wie das Bild unten aussieht, zu machen?Wie erstelle ich eine benutzerdefinierte nicht-rechteckige GroupBox?

Wenn es mit den nativen Steuerelementen nicht möglich ist, gibt es freie, benutzerdefinierte Steuerelemente, die dies unterstützen könnten?

alt text

+0

Haha. Nein. Ändern Sie das Layout Ihrer Steuerelemente. Ansonsten zeichnest du es selbst mit 'ControlPaint.DrawBorder3D'. Menschen schaffen Kontrollen, von denen sie denken, dass sie nützlich sind. das ist nicht. –

+3

@ HPT: 1. Dies ist eine seltsame Kontrolle, so ist es extrem unwahrscheinlich, dass jemand jemals darüber nachgedacht hat. 2. Durch die Frage "Wie kann ich X machen" wissen wir nichts über Ihre Fähigkeiten. Haben Sie bereits benutzerdefinierte Steuerelemente erstellt? Oder benötigen Sie uns bei der Installation von Visual Studio? Wenn oyu an hilfreichen Antworten interessiert sind, poste eine hilfreiche Frage. – peterchen

+0

@peterchen: Ich denke nicht, dass SO für das Halten der Hand während eines Prozesses ist, ich suchte nur nach einer Idee, um Entwicklung oder Implementierung schneller zu machen, Ja, ich weiß, wie man benutzerdefinierte Steuerelemente schreibt. –

Antwort

5

Es gibt keine Kontrolle, wie das Bild, das Sie gemacht, ich habe eine nicht intelligente Lösung, aber vielleicht Ihre Anforderung entsprechen,

eine UserControl erstellen und im Inneren zwei GroupBox Kontrollen setzen, dann werden Sie eine haben Linie zwischen ihnen, Sie können es ausblenden, indem Sie ein Panel darüber ohne None für BorderStyle hinzufügen.

Dann werden Sie diese Benutzerkontrolle haben:

alt text

Ich weiß, es ist nicht so intelligent wie Sie wollen, aber vielleicht ist es einfacher, als eine von Grund auf neu zeichnen und das Thema verlieren.

Sie können auch einen Titel Eigenschaft reflektieren die vertikale groupbox als Titel der

public string Title 
{ 
    get { return groupBox1.Text; } 
    set { groupBox1.Text = value; } 
} 

Viel Glück Steuer Benutzer erstellen!

+0

wow! Ausgezeichnet. –

+0

Ich bin sofort fasziniert von Antworten, die darauf hindeuten, dass ihre Lösung "nicht intelligent" ist. Ich weiß nur nicht, ob diese Intrige eine gute Sache ist. –

+0

Nun, es ist * ein Klud. – peterchen

6

Nein, eine solche Kontrolle nicht existiert im Rahmen. Sie können einen selbst erstellen, indem Sie ein Steuerelement erstellen, das GroupBox erbt.

+5

@ HPT: Es ist eine vollkommen vernünftige Antwort IMHO. Er schlug Ihnen eine gültige Lösung vor, Sie können nicht vorgeben, dass die Leute selbst Dinge für Sie implementieren oder etwas finden, das wahrscheinlich nicht existiert ... – digEmAll

+2

@HPT, Sie fragen "Wie mache ich eine GroupBox so?" Und ich antwortete das. Sie stellen keine spezifische Frage zur Implementierung, daher kann ich das nicht beantworten.Außerdem weiß ich, dass es im Framework nicht existiert, also wollte ich diese Informationen für Sie einbeziehen. Wie für den Rest Ihrer Frage - Sie können es leicht Google. Ich habe nichts wirklich brauchbares gefunden. – driis

+0

Ich googelte, bevor ich diese Frage stelle. SO ist ein voll von Profis, die mehr als google manchmal wissen! –

3

Sie werden kein Steuerelement wie folgt finden. Sie können einen selbst erstellen. Mit der Eigenschaft Control.Region können Sie ein nicht rechteckiges Steuerelement erstellen. Sie müssen den Umriss und den Titel selbst zeichnen, in der OnPaintBackground-Überschreibung.

Aber realistischerweise wird dieses Steuerelement als wiederverwendbares Steuerelement, das in anderen Formen oder Projekten von Nutzen sein könnte, nicht sehr interessant sein. Denken Sie daran, dass es nur wie eine Groupbox für den Benutzer aussehen muss. Da Sie den Zeichencode trotzdem selbst schreiben müssen, tun Sie dies im Paint-Ereignis des Formulars. Wenn Sie wegen Radiobuttons wirklich eine Box benötigen, verwenden Sie stattdessen ein Panel. Behalten Sie die Form.AutoScaleMode-Eigenschaft im Hinterkopf, Sie können die Zeilenpositionen nicht fest codieren.

+0

ist es möglich, die Eigenschaft 'GroupBox.Region' auf' GraphicsPath' zu setzen und den Rahmen mit 'ControlPaint' zu zeichnen? –

+0

Nicht wirklich. GraphicsPath.Widen() geht in die falsche Richtung, Sie können es nicht verkleinern. –

Verwandte Themen