2008-08-05 17 views
27

ComboBox modelinde bir denetime sahibim. Denetimi, denetim kenarlık kenarının standart bir Windows ComboBox standartına benzemesi için render etmek istiyorum. Özellikle, MSDN belgelerini izledim ve denetimin devre dışı bırakılması dışında denetimin tüm görselleştirmesi doğru.Görsel Stilleri olan ComboBox gibi görünecek bir denetim nasıl oluşturulur?

Sadece açık olması gerekirse, bu, Visual Styles etkinleştirilmiş bir sistem içindir. Ayrıca, denetimin tüm bölümleri, devre dışı bırakılmış bir denetimin etrafındaki kenarlık hariç, düzgün şekilde devre dışı bırakılır; bu, devre dışı bırakılmış ComboBox kenarlığı rengiyle eşleşmez.

VisualStyleRenderer sınıfını kullanıyorum. MSDN ComboBox kontrol TextBox kısım fakat standart bir devre TextBox ve biraz farklı çizmek standart devre ComboBox (bir açık gri bir sınır vardır, diğer açık mavi bir sınırı) için VisualStyleElement.TextBox elemanı kullanılarak önerir .

Denetimin devre dışı bırakılmış durumda doğru şekilde nasıl oluşturulmasını sağlayabilirim?

cevap

1

ControlPaint yöntemlerinden herhangi biri bunun için yararlı mıdır? Özel olarak oluşturulmuş kontroller için genelde kullanıyorum.

8

Aradığınızı bulamıyorsanız% 100 emin değilim, ancak System.Windows.Forms.VisualStyles-ad alanında VisualStyleRenderer ürününü incelemelisiniz.

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

kullanıcı (görsel stiller etkin yoksa VisualStyleRenderer çalışmaz beri o/o 'Klasik mod' veya Windows XP'den önceki bir işletim sistemi çalışıyor olabilir) her zaman ControlPaint sınıfına bir geri dönüş yapmanız gerekir.

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

ve çizerken sonra böyle yapın:

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

yardımcı olur Umut!

İlgili konular