0

我一直在努力解决这是否可能。

基本上我想要的是有一个正常的边框但具有透明背景的表单。在这个区域中,我想要实时显示背后的内容(很可能是视频提要),我可以捕获点击事件以在我的过度表单上显示更多信息。

目前我已经尝试使用 Form.TransparencyKey 和 BackColor 但是我在 from 的透明部分丢失了点击事件。我还尝试使用 99% 透明的 png 作为 BackgroundImage,但这只会给出深灰色背景。

我已经注意到,如果我画到间隙(即一条简单的线),我可以捕获这些点击事件,而不是透明部分。有没有办法我可以先在油漆上画一个半透明的矩形?

如果可能的话,我希望它是单声道兼容的。

4

1 回答 1

0

由于事实证明这是不可能的,我最终将第二个动态生成的表格浮动在顶部,不透明度设置为 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 中看不到,这可能是可以修复的,但我尚未对此进行研究。

于 2012-11-13T09:49:15.373 回答