画像で覆われているカスタムコントロールがいくつかありますが、それらが画面からドラッグされて再びオンになると、画像が適切に再描画されません。これらのさまざまなコントロールのペイントをオーバーライドしましたが、画面から何度もドラッグすると正しく描画されないことを除けば、正常に機能しているようです。なぜこれが起こるのか、そして/または解決策を知っている人はいますか?
編集:ダイアログが画面から外された場合だけでなく、ダイアログのサイズ変更が速すぎた場合でも、それらのいくつかに問題があるようです。彼らは自分たちの上に描かれているように見え始めます。どちらが理にかなっていますが、どうやって治すのかわかりません。
編集2:これらは4つの状態(ホバー、クリック、通常、無効)のカスタムボタンであるため、コンテナーの問題は私が考えていない問題ではないと思います。OnPaintコードは次のとおりです。
private void CQPButton_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(BackColor);
if (BackgroundImage != null)
e.Graphics.DrawImage(BackgroundImage, e.ClipRectangle);
if (Image != null)
{
RectangleF rect = new RectangleF();
rect.X = (float)((e.ClipRectangle.Width - Image.Size.Width) / 2.0);
rect.Y = (float)((e.ClipRectangle.Height - Image.Size.Height) / 2.0);
rect.Width = Image.Width;
rect.Height = Image.Height;
e.Graphics.DrawImage(Image, rect);
}
if (Text != null)
{
SizeF size = e.Graphics.MeasureString(this.Text, this.Font);
// Center the text inside the client area of the PictureButton.
e.Graphics.DrawString(this.Text,
this.Font,
new SolidBrush(this.ForeColor),
(this.ClientSize.Width - size.Width) / 2,
(this.ClientSize.Height - size.Height) / 2);
}
}
さまざまなイベントで強制的に再描画を試みました。LocationChangedとMoveを使用してサイズ変更の問題に対処し、ClientSizeChangedを使用して画面外にあるときに対処しようとしましたが、何も問題はありません。何が足りないのかわかりません...