2011-06-17 9 views
2

.NET 2.0ではカスタムユーザーコントロールを作成していますが、このユーザーコントロールは基本的にはユーザーコントロールを組み合わせたものです(ラベル付きの画像があります)。そして、それは機能がボタンとして動作するように基本的にされます、それをクリックすることができますなどボタンクリック時_ペイントを呼び出す

今私が持っている問題は、境界線スタイルは、3Dの境界線をサポートしていない何らかの理由で...

だから、ボタンを

それはBorder3dStyle.Raisedの外観を持つ必要がありますunclickedです。それが押されると、Border3dStyle.Sunkenの外観になるはずです。

私はBorder3dStyleを取得しました.Openメソッドをオーバーライドすることによって実現しました。そうですね...

他の方法がありますが、ボタン自体がクリックされたときに私が呼びたいのはこれが私の考えたことです。

 private void UserInkControl_Paint(object sender, PaintEventArgs e) 
    { 
     Rectangle borderRectangle = this.ClientRectangle; 
     ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, Border3DStyle.Sunken); 
    } 

私はloadイベントにクリックイベントが発生したとき、私はUserInkControl_Paintを呼び出すことができますどのように

 private void UserInkControl_Load(object sender, EventArgs e) 
    { 
     this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserInkControl_Paint); 
    } 

それを登録?

答えて

0
public void UserInkControl_Click(object sender, EventArgs ea) 
{ 
    UserInkControl.Refresh(); // Causes repainting immediately 
    // or 
    UserInkControl.Invalidate(); // Invalidates the whole painting surface, 
    //so when the message loop catches up, it gets repainted. 
    // There is also an overload of Invalidate that 
    // lets you invalidate a particular part of the button, 
    // So only this area is redrawn. This can reduce flicker. 
} 
+0

"Draw"メソッドの中で必要な領域だけを描画すると仮定すると、その領域だけが再描画されます。 – Vercas

0

"myControl.Refresh()"を呼び出すことができます。コントロール全体を再描画します。

0

あなたはInvalidate methodを探しています。マウスボタンが押され、その後解放された後、特定のイベントがのみ呼び出されるため

+0

リフレッシュとは、無効化と更新を意味します。無効化を無効にし、無効な領域を更新します。 – Vercas

1

Clickイベントは、あなたが何をしようとしてでは動作しません。 MouseDownイベントを使用してブール値プロパティ(たとえば_isDown)をtrueに設定してから.Refresh()にコールする必要があります。 MouseUpイベントを使用して_isDown = false;を設定してから、.Refresh()に電話してください。

Paintイベントでは、_isDownプロパティをチェックし、適切なパラメータを使用してDrawBorder3Dメソッドを呼び出します。

関連する問題