如何在winform面板的边框上添加图像?

Posted

技术标签:

【中文标题】如何在winform面板的边框上添加图像?【英文标题】:How to add image on the border of a winform panel? 【发布时间】:2017-10-14 00:04:54 【问题描述】:

我正在尝试添加与 WinForm 边框重叠的图像

但它只在面板边框内显示图像

我尝试过添加边距,但它根本不起作用

cross_Img.Location = new System.Drawing.Point(Panel1.Size.Width - 15, -5);
cross_Img.Margin = new Padding(0, -15, -15, 0);
Panel1.Controls.Add(cross_Img);

【问题讨论】:

很难想象,更有可能你没有正确解释或解决它(因此你在这里)。可以加截图和code to reproduce the issue吗? 你想让图片出现在outside the form吗? 你没有用这张图片解释任何东西。尝试详细解释您要做什么以及出于什么目的。也许有人可以告诉你做一个更好的选择。 我不知道如何进一步解释。我创建了一个面板,并简单地为某些事件添加了一个可点击的交叉图像。现在我希望这个十字图像出现在面板的边框上以获得更专业的外观。但是图像没有出现在面板边界之外。是否可以将其放置在面板的边界处?如果是,怎么做? @Sinatr 图片应该出现在表单内的 Panel 边框上 【参考方案1】:

有几种方法可以做到这一点。

这是一个简单的,可能对你来说足够好,也可能不够好。

让我们假设一个装饰Image img 和一个int bw 的边框宽度。

  int iw2 = img.Width / 2;
  int ih2 = img.Height / 2;

首先设置Padding:

adornedPanel1.Padding = new Padding(bw, ih2 + bw, iw2 + bw, bw );

这不会显示,但有助于将任何停靠控件保持在您的边界内。

接下来我们编码Paint/OnPaint代码:

  Rectangle cr = adornedPanel1.ClientRectangle;
  Rectangle r = new Rectangle(0, ih2, cr.Width  - iw2, cr.Height -  ih2 );

  using (Pen pen = new Pen(Color.MediumSlateBlue, bw)
        Alignment = System.Drawing.Drawing2D.PenAlignment.Inset)
       e.Graphics.DrawRectangle(pen, r);
  e.Graphics.DrawImage(img, cr.Right - img.Width, 0);

    

为了展示Padding 如何用于停靠和/或锚定控件,示例中有一个Label 和一个实心BackColor 停靠left 嵌套在Panel 内。 屏幕截图显示了Panel,背景为白色,因此您可以看到整个布局。

注意Pen alignment从CenterInset的设置!!

如果您创建一个面板子类,我建议它跟踪新的自定义客户区矩形..

其他解决方案可能是:

使用区域创建形状面板 覆盖另一个面板/标签/图片框

【讨论】:

【参考方案2】:

试试这个


 cross_Img.Location = new  System.Drawing.Point(488, 429);
 cross_Img.Margin = new Padding(0, -15, -15, 0); 
 // panel1.Controls.Add(cross_Img);

不要将图像添加到面板,而是指定所需的位置。

【讨论】:

以上是关于如何在winform面板的边框上添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改或添加图像到 staffdotnet.collapsiblepanel 面板标题?

winform panel面板在窗体里居中

如何停止 Richfaces 向面板和日历添加边框?

winform中按钮的被点击时的边框如何去掉?

Visual Studio - WinForms - 在右侧添加面板

如何阻止 Winforms 面板滚动?