如果可能的话,我一直在努力解决。
基本上我想要的是拥有一个边框正常但具有透明背景的表单。在这个区域,我想要实时显示背后的内容(极有可能是视频),我可以捕捉点击事件,以便在我的过度表格中显示更多信息。
目前我曾尝试使用Form.TransparencyKey和BackColor,但之后我丢失了from的透明部分中的click事件。我还尝试使用99%透明的png作为BackgroundImage,但这只是一个深灰色的背景。
我已经注意到如果我绘制间隙(即简单的线条),我可以捕获这些上的点击事件,而不是透明部分。有没有办法我可以在油漆上画一个半透明的矩形呢?
如果可能的话,我希望这是单声道兼容的。
答案 0 :(得分:0)
由于事实证明这是不可能的,我最终将第二个动态生成的表单浮动到顶部,Opacity设置为0.01。然后,我使用主窗体上的Resize和LocationChanged事件来调整大小并根据需要移动叠加窗体。然后,我只需要处理覆盖表单点击事件,以便按需要处理。
public MainFrom()
{
InitializeComponent();
f = new Form();
f.Size = panel1.Size;
f.FormBorderStyle = FormBorderStyle.None;
f.BackColor = Color.Black;
f.Opacity = 0.01;
f.ShowInTaskbar = false;
f.Show(this);
f.Click += new System.EventHandler(this.UserClicked);
}
此代码然后调整叠加表单的大小以考虑主窗体边框:
private void SetLocation()
{
// These next 2 lines calculate the width of the border
// and the title bar and then use these to off set the floating
// forms location correctly.
int xOffset = (this.Width - this.ClientSize.Width) / 2;
int yOffset= this.Height - this.ClientSize.Height - xOffset;
int x = this.Location.X + panel1.Location.X + xOffset;
int y = this.Location.Y + panel1.Location.Y + yOffset;
f.Location = new Point(x, y);
}
根据MoMa工具,这是100%单声道兼容,并且代码按照预期在MonoDevelop中编译。但是,如果我运行这个,我看到一个空引用异常,我没有在加载的MS .NET中看到,这可能是可修复的,但我还没有调查。