C# Winform 在子窗体中显示不需要的背景颜色
Posted
技术标签:
【中文标题】C# Winform 在子窗体中显示不需要的背景颜色【英文标题】:C# Winform show unwanted Background color in the child form 【发布时间】:2021-11-21 05:19:46 【问题描述】:我不知道为什么我的应用显示白色背景。无论是父母还是孩子,我都没有以任何形式设置任何白色背景。我已经尝试了所有方法并将每个面板的背景颜色设置为透明,但白色仍然存在。
请看下图,我在蓝色标记中标记了白色。
WinForm Screenshot
我正在使用 .Net Framework 4.7 并为 UI 组件使用 Guna2 Framework。
我正在使用 Dock 属性进行响应
我为每个菜单面板创建了不同的表单,只要单击菜单面板,它的表单就会显示在我面临与白色相关的问题的区域中。
我有一个父/启动表单,其中有多个面板用于菜单、标题标题和一个名为子面板的主面板。
子面板是我将相应表单添加到面板控件并显示它的面板。
我总是将 BoarderStyle 属性设置为 None 在所有形式中。
我尝试在任何地方设置边距和填充 0,但它仍然显示白色。
This is my home/parent form
This is my child Form which I add in child panel of parent Form
这是将子窗体显示到父窗体的子面板中的方法
#region Show Child Form
public static void ShowChildForm(object FormObject, Panel childPanel, string ArchiveBasePath = null)
try
var newForm = FormObject as Form;
if (ArchiveBasePath != null)
var isDark = FileEncrypt.GetArchiveData<bool>(ArchiveBasePath + @"\" + ColorTheme.Archive_ThemeSetting);
if (isDark)
ColorTheme.ChangeTheme(new ColorScheme(true), newForm.Controls);
else // Dark Mode Disabled
ColorTheme.ChangeTheme(new ColorScheme(false), newForm.Controls);
if (!childPanel.Contains(newForm))
newForm.TopLevel = false;
newForm.Dock = DockStyle.Fill;
newForm.Padding = new Padding(0,0,0,0);
if (childPanel.Controls.Count > 0)
childPanel.Controls.RemoveAt(0);
childPanel.Controls.Add(newForm);
childPanel.Tag = newForm;
newForm.Show();
catch (Exception)
#endregion
这是用于启用/禁用暗模式的 ColorTheme 类
public class ColorTheme
public static string Archive_ThemeSetting = "ThemeSetting.dat";
public static string ColorChangeTag = "ColorChange";
public static string ColorChangeLight = "ColorChangeLight";
public static string ColorLabel = "ColorLabel";
public static void ChangeTheme(ColorScheme color, Control.ControlCollection container)
foreach (Control component in container)
if (component is Guna2ShadowPanel)
ChangeTheme(color, component.Controls);
if (component.Tag == ColorChangeTag)
//((Guna2ShadowPanel)component).BackColor = ColorTranslator.Fromhtml(color.MainPanelColor);
((Guna2ShadowPanel)component).FillColor = ColorTranslator.FromHtml(color.MainPanelColor);
//component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component.Tag == ColorChangeLight)
//((Guna2ShadowPanel)component).BackColor = ColorTranslator.FromHtml(color.ChildPanelColor);
((Guna2ShadowPanel)component).FillColor = ColorTranslator.FromHtml(color.ChildPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component is Guna2Panel)
ChangeTheme(color, component.Controls);
if (component.Tag == ColorChangeTag)
//((Guna2Panel)component).BackColor = ColorTranslator.FromHtml(color.MainPanelColor);
((Guna2Panel)component).FillColor = ColorTranslator.FromHtml(color.MainPanelColor);
else if (component.Tag == ColorChangeLight)
//((Guna2Panel)component).BackColor = ColorTranslator.FromHtml(color.ChildPanelColor);
((Guna2Panel)component).FillColor = ColorTranslator.FromHtml(color.ChildPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component is Panel)
ChangeTheme(color, component.Controls);
if (component.Tag == ColorChangeTag)
component.BackColor = ColorTranslator.FromHtml(color.MainPanelColor);
else if (component.Tag == ColorChangeLight)
component.BackColor = ColorTranslator.FromHtml(color.ChildPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component is Guna2Button)
if (component.Tag == ColorChangeTag)
//((Guna2Button)component).FillColor = ColorTranslator.FromHtml(color.MainPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component.Tag == ColorChangeTag)
else if (component is TextBox)
if (component.Tag == ColorChangeTag)
component.BackColor = ColorTranslator.FromHtml(color.MainPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component is Label)
if (component.Tag == ColorLabel)
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
else if (component is MenuPanelButton)
ChangeTheme(color, component.Controls);
//System.Console.WriteLine(component.Name + ": " + color.ChildPanelColor);
public static void ChangeColor(ColorScheme color, Control component)
component.BackColor = ColorTranslator.FromHtml(color.MainPanelColor);
component.ForeColor = ColorTranslator.FromHtml(color.MainPanelForeColor);
【问题讨论】:
根据所提供的信息很难给出建议。我建议查看边距和边框,并确保它们没有设置。 可能BorderThicness
功能在您正在使用的区域中处于活动状态。可能有很多原因,但可用的信息很少。
可以尝试修改面板的边框属性吗?例如:Panel1.BorderStyle = BorderStyle.None;
如果可以的话,请粘贴一些代码sn-ps。
感谢您的 cmets,但我已经尝试了一切但没有任何反应我已经更新了我的帖子,请检查并让我知道任何可能的解决方案
【参考方案1】:
我在父表单中遇到问题,我有一些白色边框,但我从未使用过任何边框样式
通过从运行时生成的父窗体中移除阴影来解决问题
【讨论】:
以上是关于C# Winform 在子窗体中显示不需要的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
请问Winform里面怎么单击按钮来改变窗体背景图片?(C#)