Fix GroupBox doesn't apply ForeColor in ambient condition#14638
Fix GroupBox doesn't apply ForeColor in ambient condition#14638Sathish-087 wants to merge 2 commits into
Conversation
Added logic to determine foreground color based on the form's ForeColor property.
|
@Sathish-087 please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by .NET Foundation and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant .NET Foundation, and those who receive the Submission directly b. Patent License. You grant .NET Foundation, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to .NET Foundation. You agree to notify .NET Foundation in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and .NET Foundation dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
There was a problem hiding this comment.
Pull request overview
This PR aims to fix a long-standing WinForms behavior issue where GroupBox does not respect ambient/inherited ForeColor when Visual Styles are enabled, causing the caption text color to fall back to the theme’s default rather than the parent’s ForeColor.
Changes:
- Updates
GroupBox.OnPaint(Visual Styles path) to pass a text color instead of always deferring to the theme whenForeColorisn’t explicitly set. - Introduces a fallback to
Form.ForeColorwhen it differs fromSystemColors.ControlText.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if (FindForm() is Form form && form.ForeColor != SystemColors.ControlText) | ||
| { | ||
| GroupBoxRenderer.DrawGroupBox( | ||
| e, | ||
| new Rectangle(0, 0, Width, Height), | ||
| Text, | ||
| Font, | ||
| form.ForeColor, | ||
| textFlags, | ||
| gbState); | ||
| } | ||
| else | ||
| { | ||
| GroupBoxRenderer.DrawGroupBox( | ||
| e, | ||
| new Rectangle(0, 0, Width, Height), | ||
| Text, | ||
| Font, | ||
| textFlags, | ||
| gbState); | ||
| } |
| else | ||
| { | ||
| GroupBoxRenderer.DrawGroupBox( | ||
| if (FindForm() is Form form && form.ForeColor != SystemColors.ControlText) |
| else | ||
| { | ||
| GroupBoxRenderer.DrawGroupBox( | ||
| if (FindForm() is Form form && form.ForeColor != SystemColors.ControlText) |
There was a problem hiding this comment.
-
The fix uses
FindForm()which jumps directly to the top-levelForm. If theGroupBoxis inside aPanelorUserControlthat has a customForeColor, the ambient color from that intermediate parent is ignored.WinForms ambient property inheritance walks the full parent chain.
this.ForeColoralready returns the correct inherited value from any ancestor. A simpler and more correct fix would be to check whether the inherited ForeColor differs from the default -
form.ForeColor != SystemColors.ControlTextassumes the default form ForeColor is alwaysSystemColors.ControlText. If a high-contrast theme or custom Windows theme changes the default, this comparison could produce incorrect results
| Font, | ||
| textFlags, | ||
| gbState); | ||
| } |
There was a problem hiding this comment.
Lines 457-462 (the inner else) have inconsistent indentation — the DrawGroupBox call arguments are not indented relative to the method call, unlike the rest of the file
Fixes #9958
Proposed changes
Customer Impact
Regression?
Risk
Screenshots
Before
After
Test methodology
Accessibility testing
NA
Test environment(s)
Microsoft Reviewers: Open in CodeFlow