2011-06-24 17 views
19

Windows 7 üzerinde çalışan bir winform uygulamasında değişikliklerin bir combobox'ın arka plan rengini vurgulamasını istiyorum. Comboxbox'ın DropDownStyle of DropDownList vardır.Açılan kutu arka plan rengini değiştirme (yalnızca aşağıya açılan liste kısmı için değil)

BackColor özelliğini programsal olarak Kırmızı olarak değiştirdiğimde, yalnızca gerçek açılır listenin arka planı Kırmızı olarak değiştirilir. Açılır liste açılmadığında, seçilen değeri gösteren açılan kutucuk gri renkte kalır. Ne yapabilirim ki kırmızı olur? Uygulamanın Bu sizin başlamış Windows XP

cevap

14

üzerinde çalıştırıldığında

BackColor özelliğini ayarlama

çalışıyor.

Değişim OwnerDrawFixed için combobox DrawMode özelliği ve DrawItem olay işlemek:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    int index = e.Index >= 0 ? e.Index : 0; 
    var brush = Brushes.Black; 
    e.DrawBackground(); 
    e.Graphics.DrawString(comboBox1.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault); 
    e.DrawFocusRectangle(); 
} 

arkaplan rengi doğru olacaktır ama kutunun tarzı düz değil, her zamanki 3D tarzı olacaktır.

+6

Teşekkürler iyi bir başlangıç. Arka plan rengini nasıl değiştireceğini ve 3D stilini nasıl koruyacağını bilen var mı? – JBB

+0

Çok yardımcı! Teşekkür ederim. Eklemeliydim ... (e.Index == -1) geri dönerse; --- yükleme sırasında bir 'System.ArgumentOutOfRangeException' var. Ayrıca, odaklandığında arka plan rengini değiştirmek güzel olurdu. –

6

Yine de Igby Largeman'ın çözümüyle 3D efektlerini kaybettiğinizden, FlatStyle özelliğini Flat olarak değiştirmekten daha iyidir. Arka plan rengi, Windows 7'de bile bu şekilde ve düşük seviyeli olayları yeniden uygulamadan uyuyor gibi görünüyor.

Bu sorunun Microsoft'un parçası üzerinde bir hata olduğunu düşünebiliriz ...

+0

Bu, çok farklı bir görünüme neden olur ve ayrıca bazı can sıkıcı titrek yapay eserlerle sonuçlanır. –

+0

Windows Server 2012 R2'de bana sorun çıktı. Aynı Windows Server 2008'de de gayet iyi çalışıyordu. 'FlatStyle'ı' Flat 'olarak değiştirmek işe yarıyor. Günümü çok önemli bir noktada kurtardın. – RBT

İlgili konular