- PR -

TabControl の指定したTabPageを実行時編集したい

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-14 21:35
ROMを決め込んでいるみつまんさん、ご親切にありがとうございます。2番目の事項
との事ですが、私には意味が分りません。どなたか助けてください。
引用:

Hongliangさんの書き込み (2008-03-14 17:19) より:
・描画に使用する Graphics はイベント引数 PaintEventArgs の Graphics プロパティに格納されているのを使用するです。



_________________
みつまん
会議室デビュー日: 2008/03/14
投稿数: 2
投稿日時: 2008-03-14 21:46
「みつまん」です。
VB.NETでどう記述するかわかりませんが、C#では
Graphics r = e.Grahics;
となります。イベント引数 e にGraphicsというプロパティがありませんか。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-14 22:29
みつまんさん、すみません。
以下の内容が不勉強の私には意味が理解できません。
・Graphicsイベント引数PaintEventArgsのGraphicsプロパティに格納されているのを使用
・C#ではGraphics r = e.Grahics;
・イベント引数 e にGraphicsというプロパティとは

もともと基本を勉強するより、まづプログラムにチャレンジしているうちに.netを理解すればよい。
「最初に基本を・・」では難しくてチャレンジをしなくなるだろう。と教わりがんばってみましたが、やはり基本ですね。
みつまんさん、すみません。独学します。




_________________


[ メッセージ編集済み 編集者: One.net 編集日時 2008-03-14 22:31 ]
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-15 07:08
トランスレート
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim g As Graphics = e.Graphics
Dim p As New Pen(Color.MidnightBlue, 1)
Dim recst As Rectangle() = {New Rectangle(0, 0, 540, 30), _
New Rectangle(0, 30, 540, 20), _
New Rectangle(0, 50, 540, 20), _
New Rectangle(0, 70, 540, 20), _
New Rectangle(0, 90, 540, 20), _
New Rectangle(0, 110, 540, 20), _
New Rectangle(0, 130, 540, 20)}
g.DrawRectangles(p, recst)
p.Dispose() 'リソースを開放する
g.Dispose()
End Sub
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-15 10:18
indigo-xさん、ありがとうございました。
Dim g As Graphics = e.Graphics に修正してデバッグしてみましたが四角形を描写して
いる線がPictureBox1の背面に描かれているようで、PictureBox1を削除したら正常に
描くことが出来ました。
なぜPictureBox1を使わなくてもよく、コントロールに直接描けるのかは不明のままです
が、次のように記述して正常に描画できるようになりました。大変ありがとうございました。
コード:
Private Sub TabPage2_Paint(ByVal sender As System.Object, ByVal e As _
         System.Windows.Forms.PaintEventArgs) Handles TabPage2.Paint
       Dim g As Graphics = e.Graphics 
       Dim p As New Pen(Color.MidnightBlue, 1) 
       Dim recst As Rectangle() = {New Rectangle(0, 0, 540, 30), _ 
                           New Rectangle(0, 30, 540, 20), _ 
                           New Rectangle(0, 50, 540, 20), _ 
                           New Rectangle(0, 70, 540, 20), _ 
                           New Rectangle(0, 90, 540, 20), _ 
                           New Rectangle(0, 110, 540, 20), _ 
                           New Rectangle(0, 130, 540, 20)} 
       g.DrawRectangles(p, recst) 
       p.Dispose() 'リソースを開放する 
       g.Dispose() 
End Sub


_________________
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-03-15 14:36
引用:

One.netさんの書き込み (2008-03-15 10:18) より:
なぜPictureBox1を使わなくてもよく、コントロールに直接描けるのかは不明のままです
が、次のように記述して正常に描画できるようになりました。大変ありがとうございました。



PictureBoxコントロールに限らず、すべてのコントロールは描かれているからです。
各コントロールにあるPaintイベントは、
そのコントロールを描画されるときに発生します。
(TabControlを配置したら、TabControlの枠とか見えますよね?)

TabPage_Paintイベントの引数でわたってくる e.Graphicsは、
そのTabPageに対して描画するときに利用するオブジェクトです。

そのオブジェクトに対して、今回のような「四角い枠を描く」といったことを
しているため、TabPageに直接描画がされています。

尚、PictureBoxコントロールはお手軽にイメージを表示するコントロールです。

(使わなくてもがんばればイメージはButtonの上とかにも表示できます。)

PictureBoxコントロール
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.picturebox(VS.80).aspx

指摘フォロー等ありましたらお願いします。

※いろいろ修正・・

[ メッセージ編集済み 編集者: Toshi 編集日時 2008-03-15 14:49 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-15 15:14
Toshiさん、ご親切に分りやすい説明ありがとうございました。
すべてのコントロールは描かれ画像として作られているのですね。Paintイベントに対する
私のイメージは「線や図を描くときに発生するイベント」で元のコントロール本体を描く
ところまでは範囲に入っていないイメージでした。このために四角形の描写をしようと
している時に、なぜTabPage_Paintイベントなのかがピンときませんでした。

また、PictureBoxコントロールにこだわったのは画像描画のTips等にはほとんど
PictureBoxを例にされていますので、まずPictureBoxを貼りつけるものと考えておりました
「手軽にイメージを表示するコントロールです。」との事で納得です。
大変ありがとうございました。


_________________

スキルアップ/キャリアアップ(JOB@IT)