2009-02-03 5 views
9

사용자의 관심을 끌기 위해 잠시 "깜박"하고 싶은 단추가 있습니다. 내가 가장 쉬운 방법은 다른 색으로 버튼의 BackColor 속성을 변경 한 다음 다시 다시 전환하는 것입니다 생각. 그래서 내가 이런 일을 수행. NET 단추의 BackColor를 원래 값으로 다시 변경하면 더 이상 보이지 않습니다.

this.oldColor = myButton.BackColor; 
myButton.BackColor = Color.Blue; 

다음 다음 시간 이후에이 약 1/2 초 :

myButton.BackColor = this.oldColor; 

그러나 버튼의 배경 색상이 버튼의 나머지 부분보다 분명히 어두운 을 끝나게 양식에!

처음에는 단추의 원래 색이 명명 된 색 (이 경우 "제어")에 특별한 것이 있기 때문에 생각했습니다. 그러나 그렇지 않습니다. 내가 디버거에서 myButton.BackColor 볼 때

은 더 나쁜 것은, 내가 정확히 올바른

{Name=Control, ARGB=(255, 236, 233, 216)} 

를 얻을! 그러나 스크린 샷을 찍고 색상을 확인하면 나머지 버튼과 같지 않습니다!

진행 마스크의 어떤 종류가 있습니까? 아니면 어떤 종류의 디더링입니까?

답변

13

는 그 문제에 대한 원인을 파악. UseVisualStyleBackColor 이름 (만 보인다 버튼 및 TabPages에 대한) 또 다른 속성이있다 밝혀졌습니다. BackColor을 계산할 때 "시각적 스타일"을 사용할지 여부를 제어합니다. 그리고 당신이 BackColor을 설정 자마자, 설상가상, 그것은 false로 설정합니다. 그래서 난 그냥이 일을 결국 :

this.oldUseVisualStyleBackColor = myButton.UseVisualStyleBackColor; 
this.oldColor = myButton.BackColor; 
myButton.BackColor = Color.Blue; 

을 그리고 나는 그것을 다시 할 준비가있을 때 :

myButton.BackColor = this.oldColor; 
myButton.UseVisualStyleBackColor = this.oldUseVisualStyleBackColor; 

. (예, 먼저 BackColor를 다시 설정해야하고, 그런 다음에야이 UseVisualStyleBackColor 설정)

UseVisualStyleBackColor이 왜 사용되고 있는지, 왜 그것이 작동하는지는 모르지만 지금은 효과가있는 것 같습니다.

(감사합니다, Marc! 나는 당신의 도움없이 이것을 발견하지 못했을 것입니다!)

+1

@scraimer : +1. 이 문제를 문서화 해 주셔서 감사합니다. 비슷한 문제가있어서 Google을 통해 귀하의 게시물을 발견했습니다. –

+0

+1. 전에는이 부동산에 대해 들어 본 적이 없었습니다. 고마워요! – tamberg

3

나는 하나가 규칙적인 argb 색상이고 하나는 시스템/알려진 색상이라고 생각합니다.

.NET의 컨트롤은 색상이 명시 적 (이 컨트롤에서 설정)인지 또는 상속되었는지 추적합니다. 이것은 하드 다시 제대로 변경할 수 있습니다 ...하지만 당신과 같이, PropertyDescriptor와 함께 할 수 있습니다

TextBox tb = new TextBox(); 
    tb.BackColor = Color.Red; 
    // now set it back to inherited 
    PropertyDescriptor prop = TypeDescriptor.GetProperties(tb)["BackColor"]; 
    if (prop.CanResetValue(tb)) 
    { 
     prop.ResetValue(tb); 
    } 

약간 투박하지만 작동합니다.

+0

와우. 그건 무서운거야! – scraimer

2

또는 방금 입력 할 수 있습니다

TextBox tb = new TextBox(); 
//Change the Backcolor 
tb.BackColor = Color.Red; 
//Resets the Backcolor to its default value, its pretty strange that you don't see the method but it works with allmost all properties 
tb.ResetBackColor(); 
+0

쿨! 음, 매일 새로운 것을 배웁니다. 나는 그것을 시도하지 않았지만 다음에 그것을 필요로 할 것이다. 감사! – scraimer

0

간단한 방법 :

myButton.BackColor = Color.Empty 
+0

.NET 2.0에서는이 기능이 작동하지 않습니다. 다른 사람이 제대로 작동하는지 확인할 수 있습니까? – scraimer

3

버튼의 배경이 비주얼 스타일을 사용하여 그려진 여부를 버튼의 UseVisualStyleBackColor 속성을 결정합니다. 단추의 UseVisualStyleBackColor 속성을 True로 설정하면 BackColor 속성이 무시됩니다. BackColor 속성을 다른 색으로 변경하면 UseVisualStyleBackColor 속성이 자동으로 False로 설정됩니다.

디자인 모드에서이 효과를 볼 수 있습니다. 단추를 만들고 BackColor 속성을 red로 변경합니다. 그런 다음 UseVisualStyleBackColor 속성까지 스크롤하고 False로 설정되었는지 확인합니다. UseVisualStyleBackColor 속성을 True로 설정하면 단추 색이 기본 색으로 다시 변경됩니다. UseVisualStyleBackColor 속성을 다시 False로 전환하면 단추 색이 다시 빨간색으로 바뀝니다.

다음 프로그램은이 효과를 보여줍니다.

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    Button1.BackColor = Color.Red 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Button1.UseVisualStyleBackColor = Not Button1.UseVisualStyleBackColor 
End Sub 

문제를 게시하고 유죄 선고로 UseVisualStyleBackColor 속성을 식별하는 것에 대해 감사드립니다.