Csharp/C#教程:在Winforms控件中投影?分享


在Winforms控件中投影?

有没有办法为控件添加阴影?

有没有这个function的控件?

这个问题已经存在了6年,需要一个答案。 我希望任何需要这样做的人都能从我的解决方案中推断出任何控制集的答案。 我有一个面板,并希望在每个子控件下面绘制一个阴影 – 在这个例子中是一个或多个面板(但是解决方案应该适用于其他控件类型,并进行一些小的代码更改)。

由于必须在该控件的容器表面上绘制控件的阴影,我们首先向容器的Paint()事件添加一个函数。

Container.Paint += dropShadow; 

dropShadow()看起来像这样:

  private void dropShadow(object sender, PaintEventArgs e) { Panel panel = (Panel)sender; Color[] shadow = new Color[3]; shadow[0] = Color.FromArgb(181, 181, 181); shadow[1] = Color.FromArgb(195, 195, 195); shadow[2] = Color.FromArgb(211, 211, 211); Pen pen = new Pen(shadow[0]); using (pen) { foreach (Panel p in panel.Controls.OfType()) { Point pt = p.Location; pt.Y += p.Height; for (var sp = 0; sp < 3; sp++) { pen.Color = shadow[sp]; e.Graphics.DrawLine(pen, pt.X, pt.Y, pt.X + p.Width - 1, pt.Y); pt.Y++; } } } } 

显然,您可以从容器的集合中选择不同的控件类型,您可以通过一些小的调整来改变阴影的颜色和深度。

您必须像这样覆盖CreateParams属性:

 private const int CS_DROPSHADOW = 0x00020000; protected override CreateParams CreateParams { get { // add the drop shadow flag for automatically drawing // a drop shadow around the form CreateParams cp = base.CreateParams; cp.ClassStyle |= CS_DROPSHADOW; return cp; } } 

在WPF中,如果您可以延伸使用它,我认为由于GDI +的function有限,Windows Forms中没有替代品。

上述就是C#学习教程:在Winforms控件中投影?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/952109.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐