使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?

     2023-02-24     249

关键词:

【中文标题】使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?【英文标题】:With a custom WinForms control, can I change the rectangle that nested controls dock inside? 【发布时间】:2016-02-17 19:01:57 【问题描述】:

我正在尝试创建一个行为类似于GroupBox 的自定义控件,但具有更改边框颜色、更改组标签文本颜色和隐藏组标签的属性。该控件直接继承自 UserControl,并覆盖 On_Paint 以绘制边框矩形和带有表单设计者选择的任何颜色的标签。

我遇到的问题是尝试将嵌套控件停靠在其中时。停靠时,它使用控件的整个矩形,而不是绘制的矩形。我希望它表现得像 GroupBox,停靠的控件被限制在控件边框内的一个较小的矩形中。

是否有 UserControl 的属性(或者可能是 Panel,我可以继承它)允许您设置停靠的嵌套控件停靠的矩形?


谢谢你,雷扎。这正是我所需要的。这是我的新控件,如果有人想使用它:

public class LabelledPanel : Panel 

    #region Constructors / Initializers
    public LabelledPanel() : base() 
        InitializeComponent();
    

    private void InitializeComponent() 
        this.BackColor = System.Drawing.Color.Transparent;
        this.ForeColor = System.Drawing.Color.Red;
        this.Name = "LabelledPanel";
        this.ResumeLayout(false);
        this.PerformLayout();
    
    #endregion

    #region Private fields
    private String text = "Label";
    private Brush brush;
    private Color foreColor;
    private Boolean showLabel = true;
    private Int32 labelHeight = 13;
    private Int32 pad = 3;
    #endregion

    #region Properties
    [Browsable(true)]
    [Category("Appearance")]
    public override String Text 
        get  return text; 
        set  text = value; 
    

    [Browsable(true)]
    [Category("Appearance")]
    public override Color ForeColor 
        get  return foreColor; 
        set  
            foreColor = value;
            brush = new SolidBrush(value);
        
    

    [Browsable(true)]
    [Category("Layout")]
    public Boolean ShowLabel 
        get  return showLabel; 
        set  showLabel = value; 
    

    public override Rectangle DisplayRectangle 
        get 
            var r = GetBorderRect();
            return new Rectangle(
                r.Left + pad,
                r.Top + pad,
                r.Width - (2 * pad),
                r.Height - (2 * pad));
        
            
    #endregion

    protected override void OnPaint(PaintEventArgs p)             
        base.OnPaint(p);
        ControlPaint.DrawBorder(p.Graphics, GetBorderRect(), foreColor, ButtonBorderStyle.Solid);        
        if (showLabel)
            p.Graphics.DrawString(Text, Font, brush, 0, 0);
    

    private Rectangle GetBorderRect() 
        Rectangle r = this.ClientRectangle;
        if (showLabel) 
            r.Height -= labelHeight;
            r.Y += labelHeight;
        
        return r;
    

【问题讨论】:

顺便说一句,最好不要将答案作为问题的一部分发布。这可能会让未来的读者感到困惑。您可以发布已编辑的部分作为答案。 【参考方案1】:

在停靠时控制其容器的DisplayRectangle。 因此,您可以覆盖容器的DisplayRectangle 属性,以通过停靠的子控件自定义填充区域。例如,您可以查看GroupBox控件的DisplayRectangle属性的源代码。

您也可以设置Padding 属性,而不是覆盖显示矩形。对于容器控件,Padding 属性获取或设置它们的DisplayRectangle 属性。

【讨论】:

需要 C# Winforms 自定义 WebBrowser 控件

】需要C#Winforms自定义WebBrowser控件【英文标题】:C#WinformsCustomWebBrowserControlNeeded【发布时间】:2011-04-2816:10:09【问题描述】:我最近一直在网上搜索一个现有的控件,该控件的作用类似于网络浏览器控件,具有一些我需要的特定... 查看详情

C# WinForms 用鼠标拖动控件

】C#WinForms用鼠标拖动控件【英文标题】:C#WinFormsdraggingcontrolswithmouse【发布时间】:2011-06-2211:45:07【问题描述】:我正在使用WinForms在C#中制作日历。我用一个二维的面板数组把它放在一起,在它们里面我有一个代表约会的自定... 查看详情

自定义 WinForms ErrorProvider 以在控件条目中显示其图标

】自定义WinFormsErrorProvider以在控件条目中显示其图标【英文标题】:CustomizingWinFormsErrorProvidertodisplayitsiconinsidecontrol\'sentry【发布时间】:2010-11-1103:52:07【问题描述】:我有一些自定义/用户控件,在大多数情况下都有标签和条目... 查看详情

将 WPF 控件与 WinForms 一起使用

】将WPF控件与WinForms一起使用【英文标题】:UsingaWPFControlwithWinForms【发布时间】:2021-05-2818:48:39【问题描述】:我有一个自定义的WPF按钮控件,我想将此控件与WinForm应用程序一起使用。我知道如何使用ElementHost将WPF用户控件与Win... 查看详情

Telerik winforms 主题颜色自定义

】Telerikwinforms主题颜色自定义【英文标题】:Telerikwinformsthemecolorcustomization【发布时间】:2015-10-0410:33:32【问题描述】:我在我的应用程序中使用TelerikWinforms。我正在寻找最接近客户品牌要求的主题颜色组合。我选择了“Office2010... 查看详情

多个控件到单个控件c#winforms上(代码片段)

有没有办法让控制像Panel,并插入其他几个组件,如Label?我已经制作了一个自定义控件,并将工具箱中的一些控件添加到它的[Designer]中,但是在将自定义控件插入主项目时这些项目是不可见的。答案我终于弄明白了。基本上做... 查看详情

添加列的自定义 WinForms DataGridView 问题

】添加列的自定义WinFormsDataGridView问题【英文标题】:CustomWinFormsDataGridViewissueswithaddingcolumns【发布时间】:2010-11-2915:22:18【问题描述】:我正在创建一个继承内置DataGridView控件的自定义winformsdatagridview控件。我的Columns属性有问题... 查看详情

在 DateTimePicker 控件中更改周显示

...】:2020-05-0912:49:41【问题描述】:在vb.net或c#应用程序的winforms环境中使用传统的DateTimePicker控件,我需要将星期的显示方式从正常的星期日到星期六更改为星期二到星期一。我搜索了Google和Stack并没有发现任何内容。我对创建自... 查看详情

WinForms中的Control vs UserControl?

】WinForms中的ControlvsUserControl?【英文标题】:ControlvsUserControlinWinForms?【发布时间】:2010-10-2914:35:26【问题描述】:.NETWinForms中的Control和UserControl有什么区别?我想创建一个自定义控件,但我应该从哪个继承?我过去一直使用Cont... 查看详情

我可以在 WinForms 应用程序中使用哪个向导控件?

】我可以在WinForms应用程序中使用哪个向导控件?【英文标题】:WhichwizardcontrolcanIuseinaWinFormsapplication?【发布时间】:2011-06-2415:39:57【问题描述】:我一直在寻找可以在.NET3.5下的Windows应用程序中使用的类似场景的向导(带有Next/... 查看详情

首次放置在表单上时如何获取要遵守的 WinForms 自定义控件的默认值

】首次放置在表单上时如何获取要遵守的WinForms自定义控件的默认值【英文标题】:HowtogetWinFormscustomcontrol\'sdefaultvaluetoberespectedwhenfirstdroppedonaform【发布时间】:2018-06-2900:33:04【问题描述】:我有一个包含自定义控件的类库:using... 查看详情

Winforms Designer:如何禁用我的用户控件成为容器?

】WinformsDesigner:如何禁用我的用户控件成为容器?【英文标题】:WinformsDesigner:Howtodisablemyusercontrolfrombeingacontainer?【发布时间】:2012-08-0920:31:00【问题描述】:我有一个相对简单的设置。我有一个自定义用户控件,上面有一堆组... 查看详情

尝试更改标签的边框颜色

...布时间】:2010-11-0212:38:35【问题描述】:我在VB、VS2008、winforms中工作。我有一些标签要创建,我正在使用BorderStyle=FixedSingle。有没有办法改变这个边框的颜色?它始终默认为黑色。【问题讨论】:【参考方案1】:如果您不想创... 查看详情

从自定义控件引用子项

...件。ContentView有另一个嵌套的ContentView,称为MainBody。当我使用控件时,我将如何访问和设置MainBody。这就是我想要实现的目标:...<controls.Cont 查看详情

如何在java中制作自定义嵌套布局[关闭]

...及如何更改拆分面板的位置【问题讨论】:看起来您正在使用FlowLayout。首先阅读LayoutManagers上的Swing教程,然后确定可以使用哪个 查看详情

使用自定义 drawRect 代码创建 UIButton LIKE 控件

】使用自定义drawRect代码创建UIButtonLIKE控件【英文标题】:CreateUIButtonLIKEcontrolwithcustomdrawRectcode【发布时间】:2013-10-0917:08:32【问题描述】:我想创建一个类似于UIButton的自定义形状。我需要它将touchUpInside发送到按钮之类的目标... 查看详情

iOS 自定义控件

...菜单。箭头将允许我更改滑块轨道上的三天显示。根据我使用滑块选择的那一天,我想更改主屏幕上的一些视图(此菜单将在我的页面底部)。所以基本上这是我将在主控制器中“听”的唯一内容:如果选择了某一天。我已经弄... 查看详情

在另一个自定义 UIView 中设置/更改嵌套自定义 UIView 的变量

】在另一个自定义UIView中设置/更改嵌套自定义UIView的变量【英文标题】:Setting/ChangingvariablesofanestedcustomUIViewinanothercustomUIView【发布时间】:2016-06-1710:04:07【问题描述】:我目前遇到了嵌套在其他自定义UIView中的自定义UIView的问... 查看详情