0

これが可能かどうかを調べてみました。

基本的に、私が望むのは、通常の境界線を持つが背景が透明なフォームを持つことです。この領域では、背後にあるもの (ビデオ フィードの可能性が高い) のライブ表示が必要であり、クリック イベントをキャプチャして、過剰なフォームに詳細情報を表示できます。

現在、Form.TransparencyKey と BackColor を使用しようとしましたが、from の透明なセクションでクリック イベントが失われます。また、BackgroundImage として 99% の透明な png を使用しようとしましたが、これは暗い灰色の背景になります。

ギャップ (つまり単純な線) に描画すると、透明なセクションではなく、これらのクリック イベントをキャプチャできることに気付きました。最初にオンペイントで半透明の長方形を描く方法はありますか?

できればモノラル対応にしてほしいです。

4

1 に答える 1

0

これは不可能であることが判明したため、Opacity を 0.01 に設定して、動的に生成された 2 番目のフォームを上に浮かせました。次に、メイン フォームで 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 では見られない null 参照例外が表示されます。これは修正できる可能性がありますが、まだ調べていません。

于 2012-11-13T09:49:15.373 に答える