私は画像で覆われているいくつかのカスタムコントロールを持っています、そして、それらが画面からドラッグされて戻ってきた場合、画像は正しく再描画されません。私はこれらのさまざまなコントロールのために塗料をオーバーライドしています。スクリーン上で何度も繰り返しドラッグされても適切に描画されない以外は、正常に動作しているようです。なぜこれが起こるのか、そして/または解決策を知っている人は誰ですか?オフスクリーン/隠蔽後にカスタムコントロールで再描画をトリガーしますか?
編集:ダイアログがスクリーンから外れてしまっただけではなく、サイズ変更が速すぎる場合でも、いくつかの問題があるようです。彼らは彼ら自身の上に描かれたように見える。どのような意味があるのですが、私はそれを治す方法を理解できません。
編集2:これらはfourstates(ホバー、クリックし、通常、使用不可)とカスタムボタンですので、私は、コンテナの事は、私は考えていない問題ではないと思いますか..? 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);
}
}
私は、試してみて、彼らが画面から外れているときに対処するためにClientSizeChanged様々なイベント、LocationChangedに再描画し、試してみて、リサイズの問題に対処するために移動し強制的に試してみた、と何もありませんこだわり。私は何が欠けているのか分かりません...
:あなたはあなたのコントロールの実際サイズを使用する必要があります。 –
@ JohnArlen - OnPaintイベントと少し詳しい説明を追加しました。 – trycatch