Ace*_*Ace 5 .net c# graphics user-controls gdi+
我有一个简单的用户控件,实际上只是一个面板,当我在该面板中单击时,将添加一个子用户控件.那个孩子只是我设置的另一个用户控件width = 150px&height = 100px和背景颜色透明.它的中心也有一个100 x 100像素的文本框.
这个基础结构将来会是一个基于节点的接口,每个盒子都有连接锚点和逻辑btn或类似的东西.
我的问题是,如果我在面板中单击几次并且添加的框与另一个框重叠,则透明度将不会生效.
这是一个截图

我该如何解决这个问题?有没有这样的allowTransparency东西?
图纸的顺序也存在问题,新添加的块总是落后于另一个.
如果你想看到这个代码,请告诉我,但我认为没有任何相关的内容.
另外,如果您知道实现节点图的更好方法,请随时告诉我.
编辑
以下代码是我在尝试在StackOverFlow中发布问题之前尝试过的第一件事.
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
MakeTransparentControls(this);
Run Code Online (Sandbox Code Playgroud)
所以请不要将此作为重复的问题或将该代码作为答案发布
这通常是Windows中一个非常基本的限制.一个窗口与另一个窗口重叠,并阻挡其后面的任何东西.每个人最喜欢的答案,使用ControlStyles.SupportsTransparentBackColor,没有解决方法,它已经为UserControl打开,所以再次设置它没有任何区别.
样式标志模拟窗口透明度.它是通过改变窗户自我绘制的方式来实现的.它首先要求Parent在窗口内绘制以提供背景,然后将其自身绘制在其上.因此,通过将BackColor属性设置为Color.Transparent,您可以期望看到父窗口的像素作为背景.
你也是.您的用户控件的父级是表单.它尽职尽责地自我绘制,并在左侧和右侧产生灰色边缘.你希望的是还能看到其他用户控件的像素.但这不起作用,它只要求父绘制,而不是任何其他恰好重叠的控件.这当然不是不可能的,它只是丑陋而缓慢.这篇KB文章展示了这种方法.而是强调"丑陋"的绰号.
很显然,你可以改进你的UserControl,面对面,在面板的左侧和右侧有这些透明边缘没有意义.因此,将面板的Location属性设置为(0,0),将Dock属性设置为Fill.现在每个用户控件都只是一个"节点",你不需要也不想看到任何重叠的其他"节点".在节点之间绘制任何线条都需要实现表单的Paint事件.
如果你真的需要这种透明度,那么你将不得不以不同的方式做到这一点.你必须放弃为每个节点使用一个窗口的想法.一种方法是只绘制它们.如果按照正确的顺序执行此操作,那么模拟真实透明度就没有问题,通过分层绘制创建,而不是绘制在需要查看"背景"的位置.它也会快得多,控制也很昂贵.然而,您将放弃使用控件的便利性,您将不得不编写代码.像鼠标测试这样的事情变得更加复杂.如果文本框实际上不应该是一个标签(当然可以吗?),那么文本框肯定会是一个挂断.或者使用已经放弃使用窗口作为控件的GUI类库.像WPF一样.并且不要忘记有很多库已经为您完成此操作,连接节点是一种非常常见的用户界面范例.例如Visio.
在UserControl的构造函数中尝试这个:
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15985 次 |
| 最近记录: |