Hallo Community,
Ich möchte euch hier mal den SourceCode für ein BeveledLabel zur verfügung stellen.
Was ist eine BeveledLabel?
Das BeveledLabel ist ein Label mit einem darauffolgendem Strich, wie es in Installern der Fall ist. Siehe Screen:
Quelle: Installer für Notepad++ 6.8.8
SourceCode:
Verweise
Verweise braucht ihr für:
- System.Drawing
- System.Windows.Forms
- System.ComponentModel
Beveled Designer Klasse
Diese Klasse braucht ihr, um dem ControlDesigner zu sagen das man nur Bestimmte auswahlmöglichkeiten hat
BeveledLabel ControlKlasse
Kommentare stehen vor dem Code
Und für die, die zu faul sind das einfache C&P (Copy und Paste) zu verwenden,
Hier ein TestProjekt
Für ein Feedback oder eine Hilfreich Bewertung (wenn es Hilfreich war) würd ich mich freuen
Ich möchte euch hier mal den SourceCode für ein BeveledLabel zur verfügung stellen.
Was ist eine BeveledLabel?
Das BeveledLabel ist ein Label mit einem darauffolgendem Strich, wie es in Installern der Fall ist. Siehe Screen:
Quelle: Installer für Notepad++ 6.8.8
SourceCode:
Verweise braucht ihr für:
- System.Drawing
- System.Windows.Forms
- System.ComponentModel
Diese Klasse braucht ihr, um dem ControlDesigner zu sagen das man nur Bestimmte auswahlmöglichkeiten hat
Kommentare stehen vor dem Code
C#-Quellcode
- using System;
- using System.ComponentModel;
- using System.Windows.Forms;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Windows.Forms.Design;
- using System.Windows.Forms.VisualStyles;
- //Designer Eigenschaften
- [DesignerCategory("Code")]
- [Designer(typeof(BeveledDesigner))]
- [DisplayName("BeveledLabel")]
- [DefaultProperty("Text")]
- [DefaultEvent("ActivateBeveled")]
- [Description("Ein Label gefolgt von einer beliebig langen Linie, wie es bei vielen Setups der fall ist..")]
- [ToolboxItem(true)]
- [ToolboxBitmap(typeof(GroupBox))]
- public class BeveledLabel : Control
- {
- //Beim Initializieren des Labels
- public BeveledLabel()
- {
- //Den Wert fürs Initializieren setzen
- initializing = true;
- //Schrift ändern
- this.Font = new Font("Segoe UI", 9, FontStyle.Regular);
- int size = (int)(this.Font.Height);
- if (istGerade(size)) { size++; }
- this.Size = new Size(this.Size.Width * 3, size);
- thisHeight = this.Size.Height;
- //Deklarieren der Event-Funktionen
- this.Paint += BeveledLabel_Paint;
- this.FontChanged += BeveledLabel_FontChanged;
- this.SizeChanged += BeveledLabel_SizeChanged;
- this.Click += BeveledLabel_Click;
- //Den Wert auf False setzen, damit die Funktionen wissen, das es sich jetzt nichtmehr um die Initializierung handelt, die Werte festlegt.
- initializing = false;
- }
- //Wichtige Deklarationen
- bool initializing = false;
- int thisHeight = 13;
- //Deklarieren des EventHandlers
- public event EventHandler ActivateBeveled;
- //Das Event, in dem geprüft wird ob die Größe manuell oder automatisch geändert wurde
- void BeveledLabel_SizeChanged(object sender, EventArgs e)
- {
- //Prüfen ob das BeveledLabel in der Initializierungsphase ist
- if (initializing != false)
- {
- //Dann prüfen ob die Höhe auch die ist, die es seien muss.
- if (this.Size.Height != thisHeight)
- {
- //Falls nicht, zurücksetzen und einen ArgumentOutOfRange Fehler ausgeben.
- this.Size = new Size(this.Size.Width, thisHeight);
- throw new ArgumentOutOfRangeException("Du kannst die Größe nicht manuell ändern, da diese automatisch vergeben wird");
- }
- }
- }
- //Aktivierung des Controleigenen Events. Eigentlich unnötig, aber warum denn nicht ? :)
- void BeveledLabel_Click(object sender, EventArgs e)
- {
- ActivateBeveled(this, EventArgs.Empty);
- }
- //Funktion, zum Prüfen ob eine Zahl gerade ist oder nicht.
- private bool istGerade(int Zahl)
- {
- return Zahl % 2 == 0;
- }
- //Bei änderung der Font, die Größe ändern
- void BeveledLabel_FontChanged(object sender, EventArgs e)
- {
- //Höhe der Schriftart herausfinden
- int size = (int)(this.Font.Height);
- //Prüfen ob die Zahl gerade ist, falls ja wird 1 dazuadiert, um sicherzugehen das es eine ungerade Zahl ist.
- //Eine ungerade Zahl deswegen, da man sonst keine Mitte hat.
- if (istGerade(size)) { size++; }
- //Höhe in Variable festlegen
- thisHeight = this.Size.Height;
- //Größe ändern
- this.Size = new Size(this.Size.Width, size);
- }
- //Zeichen des Controls
- void BeveledLabel_Paint(object sender, PaintEventArgs e)
- {
- //Erzeugen eines Pens, zum Zeichen
- Pen p = new Pen(new SolidBrush(this.ForeColor), 1F);
- //Die Hälfte der Höhe herausfinden, um die Linie genau in die Mitte zu zeichnen
- int pHalf = this.Size.Height;
- //Toleranz abziehen
- pHalf--;
- //Hälfte ausrechnen
- pHalf = pHalf / 2;
- //Toleranz draufrechnen
- pHalf++;
- //Messen der Breite des Textes, um zu wissen, ab wann die Linie gezeichnet werden soll. Nicht das die Linie den Text durchstreicht.
- int breite = (int)e.Graphics.MeasureString(this.Text, this.Font, this.Size.Width).Width;
- //Text vor der Linie zeichnen
- e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new Point(0, 0));
- //Linie nach dem Text zeichnen
- e.Graphics.DrawLine(p, new Point(breite, pHalf), new Point(this.Size.Width - 1, pHalf));
- //Ressourcen wieder freigeben
- p.Dispose();
- e.Graphics.Dispose();
- e.Dispose();
- }
- }
Und für die, die zu faul sind das einfache C&P (Copy und Paste) zu verwenden,
Hier ein TestProjekt
Für ein Feedback oder eine Hilfreich Bewertung (wenn es Hilfreich war) würd ich mich freuen