我如何在另一个表单中使用透明度键

时间:2014-02-27 15:43:13

标签: c# .net vb.net winforms

说明:


我有2个表格(form1form2),

form1 backgroundImage = GetImage(“http://us.cdn2.123rf.com/168nwm/exe2k/exe2k1210/exe2k121000019/15806640-chess-board-background-photo.jpg”)

######################################

form2 backcolor = black
form2 transparencykey = black

######################################


注意: form2小于form1


现在让我们将form2插入form1:

form2.TopLevel = false
form2.Show()
form1.controls.add(form2)


结果应该是:
(B =黑)(W =白色)

--------------------
form1        - [] X
--------------------
|B|W|B|W|B|W|B|W|B|W
--------------------
form2        - [] X
--------------------
|B|W|B|W|B|W|B|W|B|W
|B|W|B|W|B|W|B|W|B|W
|B|W|B|W|B|W|B|W|B|W
--------------------
|B|W|B|W|B|W|B|W|B|W
--------------------


但结果是:

(B =黑)(W =白色)

--------------------
form1        - [] X
--------------------
|B|W|B|W|B|W|B|W|B|W
--------------------
form2        - [] X
--------------------
|B|B|B|B|B|B|B|B|B|B
|B|B|B|B|B|B|B|B|B|B
|B|B|B|B|B|B|B|B|B|B
--------------------
|B|W|B|W|B|W|B|W|B|W
--------------------

form2 backcolor = black。
但form2 transparencykey =黑色。
这意味着我无法在表单控件中使用transparencykey / opacity 我唯一能做的就是在form1.panel1上放置form2:

form2.show()
//form2 is not in form 1
waitUntilFormShown(form2)
do while true
form2.location = form1.panel1.location
application.doEvents()
system.thrading.thread.sleep(1)
loop

(我没有查看代码)
这不是解决问题的正确方法 (在form1上最小化/最大化/调整大小时,需要调用form2的最小化/最大化/调整大小,并且有更多理由说明我不这样做。)
剩下要问的最后一件事是:我该如何解决?或者为什么会发生?... 注意:这个“bug”不适用于图片框控件。(这就是我从一开始就问的原因)。

1 个答案:

答案 0 :(得分:0)

您可以将form2 opacity属性更改为0并将透明度键保留为默认值,并将背景颜色设置为与form1相同

Form2 frm = new Form2();
frm.TopLevel = false;
frm.BackColor = Form1.BackColor;
frm.Opacity = 0;
frm.Show();
Form1.Controls.Add(frm);