背景が透明なフォームを作成しようとしています** (「半分見える」フォームではなく、「穴」のあるフォーム)。
これで、透明な背景 (アルファ チャネルなし) と、アルファ チャネルを使用するがフォームの移動時に更新されない背景の作成に成功しました。
フォームに追加したコードは次のとおりです。
protected override void OnPaintBackground ( PaintEventArgs e ) {
Graphics gfx = e.Graphics;
gfx.DrawImage(this.BackgroundImage, new Rectangle(0, 0, this.Width, this.Height));
}
private void Form1_Paint ( object sender, PaintEventArgs e ) {
Graphics gfx = e.Graphics;
gfx.DrawImage(this.BackgroundImage, new Rectangle(0, 0, this.Width, this.Height));
}
ここでの問題は、タイマーでウィンドウを移動すると (「左」プロパティを変更して)、背景が同じままになる (穴の下の画像が更新されない) ことです。
Paint 関数が呼び出されていることは確かです。
this.Invalidate();
this.Update();
this.Refresh();
this.Show();
タイマーに-念のため:)(記事の1つで読んだ提案でした)
基本的に問題は、移動時に背景が更新されないことです。
ここに来る前に、このテーマに関する記事を 30 本ほど読んだので、より良い方法で達成しようとしていることを書きます。形式は次のようになります。
背景が透明であること (「穴」)
アルファチャンネルをサポート (エッジの「半透明ピクセル」)
フォームを移動しても透明のまま
どんな提案も素晴らしいでしょう。