2011-05-14 23 views
8

Harika Eşleştirme Oyunumun oluşturulması sırasında;) Tamamen erişilemeyen bir sorun buldum.Devre dışı bırakılan denetimin metin rengi - nasıl değiştirilir

Müzikçalar üzerinde sembol bulunan iki etiket seçtiğinde, tüm diğer etiketleri 4 saniye boyunca kilitlemek istiyorum.

Fakat bunu yaptığımda, tüm etiketlerin ön rengi griye dönüşür ve semboller görünür. Sorum şu: - görsel C# 'de devre dışı bırakılmış bir etiketin ForeColor'unu değiştirmek için bir yöntem var mı?

Proje bir WinForm uygulamasıdır. çalışırken daha

lable1.ForeColor = Color.Black; 
+3

Hangi proje tipi? WinForms, WPF, ASP.NET? –

+0

Şu andaki rengi nasıl ayarlıyorsunuz? Kodunu gönderebilir misin? – Oded

+4

Etiketler, her zaman ** kullanıcıların "kendi metinlerini düzenleyemediği veya başka bir şekilde bunları değiştiremeyeceği" şeklindeki ** "kilitli" şeklindedir. Bu etkiyi elde etmek için onları devre dışı bırakmaya gerek yok. –

cevap

7

Way basit: Kullanıcı Ben bunu değiştirmek etiketini tıkladığında

label1.ForeColor = lable1.BackColor; 

: Şu anda

bu şekilde kodunda bir etiketin rengini ayarlamak Windows'un engelli denetimleri çizme şeklini değiştirmek için, etkin bir şekilde "devre dışı" olmak üzere Label olmasını istediğinizde bir bayrağı ayarlamak yeterlidir ve ardından, w'yi almadan önce Click olay işleyicisi yönteminizdeki bu işaretin değerini kontrol edin. İstediğiniz nefret eylemi. Kontrol "devre dışı" ise, herhangi bir işlem yapmayın. Böyle

şey: Ayrıca

private bool labelDisabled = false; 

private void myLabel_Click(object sender, EventArgs e) 
{ 
    if (!labelDisabled) 
    { 
     this.ForeColor = SystemColors.ControlText; 
    } 
} 

, not her zaman Color.Black gibi bir şey yerine SystemColors kullanmalıdır.
Belirli renk değerlerini sabit olarak kodlarsanız, kullanıcı varsayılan Windows temasını özelleştirdiğinde sıklıkla çakışırlar. Raymond Chen, bunun haberini kendi blogundaki bir makalede tartışır.

+0

Harika ve basit – Mqati

+7

teşekkürler "Her zaman SystemColors kullanmak" tavsiyesi hakkında bir yorum - her zaman ya da asla - her şey için ya da bunların hiçbiri için tüm renklerin hardcode, olması gerektiğini söyleyebilirim. Bazen, Windows temasına köle olmak yerine, şeylerin görünüşünü kendiniz kontrol etmek istersiniz. Ama onları karıştırmayın, işte o zaman çelişen şeyler olur. –

+1

Evet, kesinlikle bir "ya hep ya hiç" meselesi. Ama ben senin "Windows temasına köle" deyimi ile sorun çıkar. Bunu, "kullanıcının tercihlerine göre köle" olarak düşünürseniz yardımcı olur. Oldukça iyi bir fikir. –

8

Sadece bir yeniden tanımlandı boya olayı ile kendi etiket oluşturmak:

protected override void OnPaint (System.Windows.Forms.PaintEventArgs e) 
{ 
    if (Enabled) 
    { 
     //use normal realization 
     base.OnPaint (e); 
     return; 
    } 
    //custom drawing 
    using (Brush aBrush = new SolidBrush("YourCustomDisableColor")) 
    { 
     e.Graphics.DrawString(Text, Font, aBrush, ClientRectangle); 
    } 
} 

metin çizim sırasında metin formatı bayraklarıyla dikkatli olun.

+0

Bir DateTimePicker ile bunu yapmaya çalışan herkes için: İşte çözüm http://stackoverflow.com/questions/1595481/datetimepicker-and-userpaint-text-and-button-missing – Breeze

İlgili konular