2011-07-13 18 views
1

私はC#を使用してタブコントロールに画像を描画する必要があります。私は、DrawModeをOwnerDrawFixedに、そしてSizeModeをFixedに変更するヒントをいくつか得ました。 DrawItemイベントのためにその書き込みハンドラ後:C#を使用してタブコントロール上にイメージを描画する方法は?

this.tabControl1.DrawItem += 
    new System.Windows.Forms.DrawItemEventHandler(this.OnDrawItem); 

private void OnDrawItem(object sender, DrawItemEventArgs e) 
{ 
    Graphics g = Graphics.FromHwnd(tabPage1.Handle);/*e.Graphics;*/   

    DrawArrowImage(g); 
} 

今、こののdrawImage()関数が動く矢印に似ていると、次の点に矢印画像を再描画維持するタイマーを起動します。ここで私はいくつかの問題があります:

  1. 私はアプリケーション(同様のOnPaint())を実行するときにOnDrawItemが呼び出されていません。どうしたらいいですか?
  2. Invalidate()を呼び出すと、paintイベントが呼び出され、OnPaint()が呼び出されるため、Invoke OnDrawItem()を呼び出せるように 'DrawItem'イベントを呼び出す方法はありますか?

おかげで、 RPSは、あなたはそれが間違ってやっている

答えて

1

は、DrawItemイベントが唯一のカスタムタブではなく、タブページを描画するためのものです。単にタブページのペイントイベントを実装するだけです。描画を行うには、渡されたe.Graphicsを使用してください。

... 
this.tabPage1.Paint += this.OnDrawPage; 
... 

private void OnDrawPage(object sender, PaintEventArgs e) 
{ 
    DrawArrowImage(e.Graphics); 
} 
+0

私はGraphics = Graphics.FromHwnd(tabPage1.Handle)を使用しました。 DrawArrowImage(e.Graphics); その図面ですが、アプリケーションとして開始されません。グラフィックスg = e.Graphicsを使用している場合。それはすぐに描画しますが、フォーム上のタブコントロールの背後にあります。 – RPS

+0

タブページのペイントイベントの代わりにフォームのペイントイベントを購読したように聞こえます。 –

+0

ありがとう...私は今、同じことをやっていて、同じことをやっています。そして、タブページ上に画像を描くことができます。そして、ペイントハンドラを繰り返し呼び出すために、this.tabPage1.Invalidate(); ..この場合、他の描画されたイメージはちらついています。ペイントハンドラで、GraphicsオブジェクトをGraphicsとして取得します。g = Graphics.FromHwnd(tabPage1.Handle);グラフィックスg = e.Graphics; ...両者で同じフリッカー出力...ウィンドウフォームを描画する場合は滑らかでした。 – RPS

関連する問題