문제

나는 ToolStripDropDown 제어.나도 수정하고싶다 ToolStripDropDownButton 그 자체로 색깔 있는 모양을 표시합니다.

나는 내가 그 일을 감당할 수 있다고 본다 Paint 이벤트를 진행하고 내가 좋아하는 것을 그려보세요.그러나 모양을 칠하기 전에 버튼이 기본 배경을 칠하도록 하는 방법이 있습니까?특히 향후 버전의 .NET 및 Windows에서는 배경을 정확하게 얻는 것이 어려울 수 있습니다.

일반 Windows에서는 페인트 코드 전후에 기본 proc 핸들러를 호출할 수 있습니다..NET에서는 이를 수행할 수 있는 방법이 없습니다.아니면 버튼에 배경만 칠하도록 지시하는 방법이 있을까요?

도움이 되었습니까?

해결책

당신이 처리할 때 Paint 이벤트 (재정의하는 것과 반대로 OnPaint 방법 파생 클래스에서) 기본 클래스(기본 proc 핸들러)가 이미 호출되고 있습니다.모든 것이 정상적으로 그려지고 나면 본질적으로 그림이 그려집니다. 그 위에 에서 Paint 이벤트.여기에서 이를 명확하게 볼 수 있습니다.

     Lime rectangle drawn over part of the drop-down button, clearly showing the default contents underneath

비결은 컨트롤의 클리핑 사각형이 충분히 노출되도록 하는 것입니다. 보여주다 원하는 부분.그만큼 e.ClipRectangle 속성은 전체 버튼의 클라이언트 영역이므로
색상 견본으로 채우면 드롭다운 화살표와 기본 배경도 가려지게 됩니다.위 데모는 다음과 같은 보기 흉한 샘플 코드를 사용하여 작성되었습니다.

private void ToolStripDropDownButton1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.Chartreuse,
                             e.ClipRectangle.X + 3, e.ClipRectangle.Y + 3,
                             e.ClipRectangle.Width - 12,
                             e.ClipRectangle.Height - 12);
}

그 외에는 기본 클래스에서 정확히 그리는 내용을 사용자 정의할 수 있는 방법이 없다고 생각합니다.소유자 그리기(적어도 WinForms에서는)는 전부 아니면 전무한 문제인 경향이 있습니다.당신은 완전한 통제권을 얻습니다.
하지만 모든 것을 직접 구현해야 하는 대가가 따릅니다.


물론, 아직 눈치채지 못하셨다면, ToolStrip 제어 이미 기본 Windows 컨트롤처럼 보이지 않습니다.그리고 더 나쁜 것은 언제나 지금과 똑같아 보이겠지만,
UI를 완전히 점검하는 향후 버전의 Windows에서도 마찬가지입니다.(그만큼 MenuStrip 에 시달린다
이와 동일한 현상이 발생하며 표준 API 메뉴가 극적으로 변경된 Windows Vista/7에서도 그 차이가 매우 뚜렷하게 나타납니다.그 이유는 두 컨트롤이 모두 WinForms 구현으로 작성된 C# 코드로 그려지기 때문입니다.개인적으로 나는 그것이 터무니없이 촌스러워 보인다고 생각하며 내기에 대한 내 응용 프로그램 중 하나에서는 사용하지 않을 것입니다.

~할 수 있다 UxTheme API를 사용하여 버튼을 그리는 사용자 정의 렌더러를 할당하면 많이 기본 메뉴 및 도구 모음의 모양에 더 가깝습니다.매우 철저한 샘플을 사용할 수 있습니다. 여기.저는 WinForms 개발과 매우 유사한 내용을 작성했는데, 이 작업에는 WinForms의 추가 기능이 필요합니다. ToolStrip 에서 제공하지 않는 클래스(예: 내장 콤보 상자)
오래된 학교 MainMenu 그리고 ToolBar Windows API에 해당하는 항목을 간단히 래핑하는 컨트롤입니다.이러한 방식으로 작업을 수행하도록 선택하면 코드를 명시적으로 직접 작성했기 때문에 호출하려는 기본 클래스 렌더러의 부분을 정확히 더 잘 제어할 수 있습니다.당신이 있다면 적극 추천합니다
UI, 네이티브 느낌 또는 사용자 경험에 전혀 관심을 두는 유형입니다.

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