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 在子窗体中显示不需要的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

C# winform怎么实现子窗体关闭时刷新父窗体数据

请问Winform里面怎么单击按钮来改变窗体背景图片?(C#)

C# Winform主窗体和子窗体之间如何相互操作对方的控件

C# Winform中如何实现窗体之间的跳转

C#中子窗体操作父窗体的变量

C# winform 制作圆形窗体