Vă mulțumim pentru susținere

Cum de a face un control să arate ca ComboBox cu Visual Styles activat?

Am un control care este modelat pe ComboBox . Vreau să fac controlul astfel încât border să arate ca un standard Windows ComboBox . Mai exact, am urmat documentația MSDN și toate redarea controlului este corectă, cu excepția redării atunci când controlul este dezactivat.

Doar pentru a fi clar, acest lucru este valabil pentru un sistem cu Stiluri vizuale activat. De asemenea, toate părțile controalelor se execută în mod corespunzător, cu excepția frontierei în jurul unui control dezactivat, care nu se potrivește cu culoarea Bord comboBox dezactivată.

Folosesc clasa VisualStyleRenderer . MSDN sugerează utilizarea elementului VisualStyleElement.TextBox pentru TextBox din comanda ComboBox , dar TextBox < un standard ComboBox dezactivat este ușor diferit (unul are o margine gri deschis, cealaltă o margine albastru deschis).

Cum pot obține redarea corectă a controlului într-un stat cu dizabilități?

0
adăugat editat

2 răspunsuri

Sunt oricare dintre metodele ControlPaint utile pentru acest? Asta folosesc de obicei pentru comenzile redate la comandă.

0
adăugat

Nu sunt sigur 100% dacă aceasta este ceea ce căutați, dar ar trebui să verificați VisualStyleRenderer în spațiul de nume System.Windows.Forms.VisualStyles.

  1. VisualStyleRenderer class (MSDN)
  2. How to: Render a Visual Style Element (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Din moment ce VisualStyleRenderer nu va funcționa dacă utilizatorul nu are activat stiluri vizuale (ar putea funcționa "mod clasic" sau un sistem operativ înainte de Windows XP), trebuie să aveți întotdeauna o rezervă pentru clasa ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

și apoi faceți acest lucru atunci când desenați:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

Sper ca ajuta!

0
adăugat