2016-05-31 17 views
1

Panelから派生したカスタムコントロールを作成しました。 デザイナーでフォーカスが失われた場合にのみコントロールが再描画される点を除いて、すべてうまく動作します。 私は何が欠けていますか?ここデザイナーでカスタムコントロールを更新する方法を教えてください。

がCustomControl.cs

using System.ComponentModel; 
using System.Drawing; 
using System.Windows.Forms; 

namespace Picwing 
{ 
    public partial class xPanel : Panel 
    { 
     private SizeF textSize; 

     public xPanel() { 
      InitializeComponent(); 
     } 

     [Browsable(true)] 
     public override string Text { 
      get { return base.Text; } 
      set { base.Text = value; } 
     } 

     protected override void OnPaint(PaintEventArgs pe) { 
      base.OnPaint(pe); 
      textSize = pe.Graphics.MeasureString(Text, Font); 
      pe.Graphics.DrawRectangle(new Pen(ForeColor, 1), pe.ClipRectangle.X, pe.ClipRectangle.Y + textSize.Height/2, pe.ClipRectangle.Width - 1, pe.ClipRectangle.Height - textSize.Height/2 - 1); 
      pe.Graphics.FillRectangle(new SolidBrush(BackColor), 5, 0, textSize.Width, textSize.Height); 
      pe.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), pe.ClipRectangle.X + 6, pe.ClipRectangle.Y); 
     } 
    } 
} 

のコードであり、それがフォーカスを失った前にこれは、xPanel1内部LABEL1を移動した後に撮影した印刷画面です。 enter image description here

+0

を見てみることができますか? –

+0

あなたのコントロールのコードを投稿するのを忘れました。 –

+0

'+ ='でOnPaintイベントを登録しましたか? – jdweng

答えて

1

コントロールにペイントしている間にpe.ClipRectangleを使用しているために問題があります。 pe.ClipRectangleは使用しないでください。必要に応じてDisplayRectangleまたはClientRactangleを代わりに使用してください。

あなたが見ることができるように、pe.ClipRectangle境界に描画すると、描画はコントロールの最も小さい無効な部分で行われます。

注:あなたはそれにいくつかの他のコンポーネントを追加するには、パネル部品のデザイナーを使用しない限り

  • あなたは、コンストラクタでInitializeComponent();を持っている必要はありません。

  • あなたは、代わりに0,5使用DisplayRectangle.X + 5, DisplayRectangle.YFillRectangle方法では、DisplayRectangleを使用した場合。あなたはカスタムGroupBoxを描画しようとしている場合

  • 、あなたはそれをスクリーン印刷でしCustom GroupBox BackColor to Transparent

+0

ありがとうございました。問題は解決しました。 –

+0

あなたは歓迎です:) –

関連する問題