.NET 버튼의 백콜러를 원래 값으로 변경하면 더 이상 똑같이 보이지 않습니다.

StackOverflow https://stackoverflow.com/questions/506641

  •  21-08-2019
  •  | 
  •  

문제

사용자의 관심을 끌기 위해 간단히 "플래시"하고 싶은 버튼이 있습니다. 가장 쉬운 방법은 버튼을 변경하는 것입니다. BackColor 다른 색상으로 속성을 한 다음 다시 전환하십시오. 그래서 나는 다음과 같은 일을합니다.

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

그리고 약 1/2 초 후에 :

myButton.BackColor = this.oldColor;

그러나 버튼의 배경색은 끝납니다 뚜렷하게 양식의 나머지 버튼보다 어둡습니다!

처음에는 버튼의 원래 색상이 명명 된 색상 (이 경우 "컨트롤")에 특별한 것이 있기 때문이라고 생각했지만 그렇지 않습니다.

더 나쁜 것은 내가 볼 때 myButton.BackColor 디버거에서 나는 얻는다

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

정확히 맞습니다! 그러나 스크린 샷을 찍고 색상을 확인하면 나머지 버튼과 다릅니다!

어떤 종류의 마스킹이 진행되고 있습니까? 아니면 어쩌면 어떤 종류의 디더링?

도움이 되었습니까?

해결책

나는 문제의 원인을 알아 냈습니다. 다른 속성 (버튼과 탭 페이지에만 해당)이라는 것이 밝혀졌습니다. UseVisualStyleBackColor. 계산할 때 "시각적 스타일"을 사용할지 여부를 제어합니다. 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! 나는 당신의 도움없이 이것을 찾지 못했을 것입니다!)

다른 팁

차이점은 하나가 일반 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);
    }

약간 어리석지 만 작동해야합니다.

버튼의 usevisualStyleBackColor 속성은 시각적 스타일을 사용하여 버튼의 배경이 그려지는지 여부를 결정합니다. 버튼의 usevisualstyle backcolor 속성이 true로 설정되면 백 콜러 속성이 무시됩니다. 백 콜러 속성이 다른 색상으로 변경되면 usevisualstyle backcolor 속성이 자동으로 False로 설정됩니다.

디자인 모드에있을 때이 효과를 볼 수 있습니다. 버튼을 만들고 백 컬러 속성을 빨간색으로 변경하십시오. 그런 다음 UsevisualStyleBackColor 속성으로 스크롤하여 False로 설정되었음을 주목하십시오. 그런 다음 usevisualstyle backcolor 속성을 true로 설정하면 버튼 색상이 기본 색상으로 다시 변경됩니다. usevisualstyle backcolor 속성을 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

그의 문제를 게시하고 UsevisualStyle BackColor 속성을 유죄 컬 퍼트로 식별 한 스크라이머 덕분에 감사합니다.

또는 당신은 그냥 입력 할 수 있습니다 :

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();

간단한 방법 :

myButton.BackColor = Color.Empty
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top