myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Knowledge Base » Artikel » [Gewusst wie] ToolStrips: enthaltene ComboBox, TextBox, ProgressBar anpassen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Gewusst wie] ToolStrips: enthaltene ComboBox, TextBox, ProgressBar anpassen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
juetho juetho ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.10.2006
Beiträge: 3.331
Entwicklungsumgebung: #D NET 2.0 / Firebird (WinXP)
Herkunft: Berlin


juetho ist offline

[Gewusst wie] ToolStrips: enthaltene ComboBox, TextBox, ProgressBar anpassen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Gewusst wie: für ToolStrips ComboBox, TextBox, ProgressBar anpassen

In diesem Beitrag wird beschrieben, wie für eine ToolStripComboBox das DrawItem-Ereignis genutzt werden kann, obwohl dies laut Bitte schau in die SDK-/MSDN-Doku SDK-Doku nicht existiert. Solche Verfahren sind in gleicher Weise möglich für:
  • ToolStrip, MenuStrip, StatusStrip
  • die Elemente ComboBox, TextBox, ProgressBar
  • Eigenschaften, Methoden und Ereignisse, die es laut Doku für diese Elemente nicht gibt
Bei anderen ToolStrip-Elementen ist der kleine Umweg nicht erforderlich.

Problemstellung: Die Items einer ToolStripComboBox sollen in einer jeweils eigenen Farbe angezeigt werden.

ComboBox-Lösung: Das Control wird als OwnerDrawFixed bzw. OwnerDrawVariable festgelegt; die DrawItem-Methode wird selbst erstellt. Dieses Verfahren wird oft beschrieben, z.B. über die Suche nach  ComboBox AND DrawItem oder bei  CodeProject.

Nicht möglich: Die "normale" ComboBox-Lösung kann nicht direkt übernommen werden, weil die ToolStripComboBox nicht von ComboBox abgeleitet ist, sondern von ToolStripControlHost und ToolStripItem.

Unpassende Notlösung: Anstelle einer ToolStripComboBox wird eine normale ComboBox in das ToolStrip eingebettet. Dies hat  idontwantaname gemacht, aber als ungeeignet beschrieben.

Einfaches und praktisches Verfahren: Die ToolStripComboBox bietet einen public-Zugriff auf die eingebettete ComboBox. Damit stehen deren Eigenschaften und Ereignisse im Designer nur beschränkt zur Verfügung, zur Laufzeit kann sie jedoch problemlos für OwnerDraw(Fixed/Variable) genutzt werden.

1. Registriere die eingebettete ComboBox für die Draw-Methode:

C#-Code:
ToolStripComboBox tsBox;
//  im Konstruktor nach InitializeComponents() einfügen:
tsBox.ComboBox.DrawMode = DrawMode.OwnerDrawFixed;
tsBox.ComboBox.DrawItem += new DrawItemEventHandler(tsBox_DrawItem);

2. Die eingebettete ComboBox kann wie jede andere ComboBox selbst gezeichnet werden:


C#-Code:
private void tsBox_DrawItem(object sender, DrawItemEventArgs e)
{
    //  der folgende Code wurde im Prinzip übernommen von:
    //  Managed Font Combobox by Martin Cook
    //  [URL]http://www.codeproject.com/cs/miscctrl/CGFontCombo.asp[/URL]

    // If the index is invalid then simply exit.
    if (e.Index < 0 || e.Index >= boxFontColor.Items.Count)
        return;

    e.DrawBackground();

    // Should we draw the focus rectangle?
    if ((e.State & DrawItemState.Focus) != 0)
        e.DrawFocusRectangle();

    // zeichne den Inhalt wie unter den gegebenen Umständen gewünscht
    Brush b = null;
    string colorName = (string)boxFontColor.Items[e.Index];
    // Create a new background brush.
    if (e.Index == 0)
        b = new SolidBrush(Color.Black);
    else
        b = new SolidBrush(Color.FromName(colorName));

    // Draw the item.
    e.Graphics.DrawString(colorName, e.Font, b, e.Bounds);
}

Für die anderen oben genannten ToolStripItems habe ich das Verfahren (noch) nicht genutzt. Ich wüsste aber keinen Grund, warum es nicht klappen sollte. Wer es ausprobiert hat, kann sich hier oder über eine persönliche Nachricht melden.

Viel Erfolg! Jürgen

Nachtrag 1: ActiveControl kann auf diese Weise ebenfalls gesetzt werden, z.B. (selbst getestet):

C#-Code:
this.ActiveControl = toolStripTextBox1.TextBox;

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von juetho am 05.04.2007 09:18.

13.03.2007 12:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Jahre.
Der letzte Beitrag ist älter als 11 Jahre.
Antwort erstellen


© Copyright 2003-2018 myCSharp.de-Team. Alle Rechte vorbehalten. 21.05.2018 05:14