C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: メッセージボックスから戻った後、Graphicsについて


(過去ログ 51 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■28208 / inTopicNo.1)  メッセージボックスから戻った後、Graphicsについて
  
□投稿者/ らぐんす (7回)-(2008/11/21(Fri) 10:02:12)

分類:[VB.NET/VB2005 以降] 

いつも何かとお世話になっております。

下線付きラベル(Label枠の下辺部のみにLineを引いたもの)をユーザーコントロールで作成したく、勝手ながらWankumaLineコントロールを参考にさせて頂いたのですが、MsgBoxを表示した後に一部線が欠けてしまいます。(MsgBoxの表示がされてた部分)
MsgBoxからメインのFormに戻る際はOnPaintでなく、どのイベントを探せばよいのでしょうか?
引用返信 編集キー/
■28214 / inTopicNo.2)  Re[1]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ やじゅ (789回)-(2008/11/21(Fri) 12:39:02)
やじゅ さんの Web サイト
2008/11/21(Fri) 12:39:52 編集(投稿者)

No28208 (らぐんす さん) に返信
> MsgBoxを表示した後に一部線が欠けてしまいます。(MsgBoxの表示がされてた部分)
> MsgBoxからメインのFormに戻る際はOnPaintでなく、どのイベントを探せばよいのでしょうか?

Refresh or Update ようは再描画です。
http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

引用返信 編集キー/
■28216 / inTopicNo.3)  Re[2]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ 渋木宏明(ひどり) (954回)-(2008/11/21(Fri) 13:40:20)
渋木宏明(ひどり) さんの Web サイト
> Refresh or Update ようは再描画です。

MsgBox が去った後なら、普通はシステムが無効領域の再描画を通知してきます。

自力で Refresh(), Update() する必要はありません。

「どのイベントを補足するのか」ではなく、「描画の手順に何か問題がないか?」「システムの描画通知を混乱させる余分なことをしていないか?」などを疑うべきです。

引用返信 編集キー/
■28217 / inTopicNo.4)  Re[3]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ .SHO (129回)-(2008/11/21(Fri) 14:10:37)
現象が再現できる最小限の処理まで削って
ソースを貼ってもらえると解答しやすいです。
引用返信 編集キー/
■28222 / inTopicNo.5)  Re[1]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ まんごーぷりん (43回)-(2008/11/21(Fri) 15:50:25)
まんごーぷりん さんの Web サイト
No28208 (らぐんす さん) に返信

トロールを参考にさせて頂いたのですが、MsgBoxを表示した後に一部線が欠けてしまいます。(MsgBoxの表示がされてた部分)

MsgBox って何だろう?
System.Windows.Forms.MessageBox ではなくて?
ひょとして VB6 以前の話です?
引用返信 編集キー/
■28223 / inTopicNo.6)  Re[2]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ Mr.T (294回)-(2008/11/21(Fri) 16:14:33)
Mr.Tです。

> MsgBox って何だろう?
> System.Windows.Forms.MessageBox ではなくて?
> ひょとして VB6 以前の話です?

Microsoft.VisualBasicにあるMsgBox関数のことでしょうね。
引用返信 編集キー/
■28224 / inTopicNo.7)  Re[2]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ 魔界の仮面弁士 (906回)-(2008/11/21(Fri) 16:22:14)
# 本題と関係の無いところに反応。

No28222 (まんごーぷりん さん) に返信
> MsgBox って何だろう?
> ひょとして VB6 以前の話です?
VB6 で WankumaLine を使うとも思えませんし…OnPaint の話が出てくることも無いと思いますよ。
(MsgBox は、VB.NET でも使用可能です)


> System.Windows.Forms.MessageBox ではなくて?
表示させるデータを、String ではなく Object で受け取る仕様になっているという点や、
コンソールアプリで、追加の参照設定無しに呼び出す事ができるといった違いがありますが、
機能的には MessageBox.Show とほぼ同等です。
引用返信 編集キー/
■28227 / inTopicNo.8)  Re[3]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ まんごーぷりん (44回)-(2008/11/21(Fri) 16:38:19)
まんごーぷりん さんの Web サイト
Mr.T さん
魔界の仮面弁士さん

Microsoft.VisualBasic.MsgBox というものが存在するのですね。
これは大変失礼いたしました。

知らない奴はすっこんでます。ごめんなさい orz

#ところで、OnPaint は、MsgBox を閉じた後にきちんと呼び出されていますか?
引用返信 編集キー/
■28230 / inTopicNo.9)  Re[4]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ らぐんす (8回)-(2008/11/21(Fri) 17:34:43)
皆様ありがとうございます。
重鎮の方々まで...恐れ多いのですが、ソースの抜粋です。


''' <summary>
''' 下線付きラベルです。
''' </summary>
Partial Public Class UnderLineLabel
Inherits System.Windows.Forms.Label

''' <summary>
''' 線幅のメンバ
''' </summary>
Private _large As Single = 1.0F

''' <summary>
''' 描画する線幅を指定する
''' </summary>
<DefaultValue(1.0F)> _
Public Property LineLarge() As Single
Get
Return Me._large
End Get
Set(ByVal value As Single)
If value < 1 Then
Me._large = 1.0F
Else
Me._large = value
End If
End Set
End Property

''' <summary>
''' 描画処理
''' </summary>
''' <param name="e"></param>
Protected Overloads Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)

'線パターンにあわせて描画する。
Using sb As New SolidBrush(Me.ForeColor)
'xy等を調べる
Dim x As Single = e.Graphics.VisibleClipBounds.X
'Dim y As Single = e.Graphics.VisibleClipBounds.Y
Dim width As Single = e.Graphics.VisibleClipBounds.Width
Dim height As Single = e.Graphics.VisibleClipBounds.Height
'線を描画する
'上辺
e.Graphics.FillRectangle(sb, 0, height - _large, width, height)
End Using


End Sub

End Class
引用返信 編集キー/
■28234 / inTopicNo.10)  Re[5]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ まんごーぷりん (46回)-(2008/11/21(Fri) 17:49:18)
まんごーぷりん さんの Web サイト
No28230 (らぐんす さん) に返信
> ''' <summary>
> ''' 描画処理
> ''' </summary>
> ''' <param name="e"></param>
> Protected Overloads Overrides Sub OnPaint(ByVal e As PaintEventArgs)
> MyBase.OnPaint(e)
>

描画そのものに問題があるとは思えないんですよね。
MyBase.OnPaint(e) にプレイクポイントをおいて MsgBox が閉じられた後に反応しますか?
引用返信 編集キー/
■28235 / inTopicNo.11)  Re[5]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ .SHO (133回)-(2008/11/21(Fri) 17:50:25)
No28230 (らぐんす さん) に返信

> Dim width As Single = e.Graphics.VisibleClipBounds.Width
> Dim height As Single = e.Graphics.VisibleClipBounds.Height
> e.Graphics.FillRectangle(sb, 0, height - _large, width, height)

VisibleClipBounds は MsgBox が重なっていた領域を示してるので
この FillRectangle の引数が間違ってるんじゃないですか?
(すいません。確認はしてません。)
引用返信 編集キー/
■28347 / inTopicNo.12)  Re[6]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ らぐんす (9回)-(2008/11/25(Tue) 09:30:15)
まんごーぷりん さん
> 描画そのものに問題があるとは思えないんですよね。
> MyBase.OnPaint(e) にプレイクポイントをおいて MsgBox が閉じられた後に反応しますか?

OnPaintでデバッグ止める操作結構大変だったので、小さいFormで確認したのですが、MsgBoxから戻った時にOnPaintは発生しませんでした。MsgBoxをマウスで動かした場合は発生するのですが・・・

.SHO さん
> FillRectangle の引数が間違ってるんじゃないですか?

すみません。見よう見真似でやってみたので、どのように違うのでしょうか?

いずれにしても、MsgBoxを自在に動かすと、線部分が消えたり、ラベル上の色々な座標に描かれたりしてしまいます。
BorderStyleプロパティであったりすると便利なのですが・・・

引用返信 編集キー/
■28353 / inTopicNo.13)  Re[7]: メッセージボックスから戻った後、Graphicsについて
□投稿者/ .SHO (153回)-(2008/11/25(Tue) 10:01:48)
No28347 (らぐんす さん) に返信

>>FillRectangle の引数が間違ってるんじゃないですか?
>
> すみません。見よう見真似でやってみたので、どのように違うのでしょうか?
>
> いずれにしても、MsgBoxを自在に動かすと、線部分が消えたり、ラベル上の色々な座標に描かれたりしてしまいます。
> BorderStyleプロパティであったりすると便利なのですが・・・

Dim width As Single = e.Graphics.VisibleClipBounds.Width
Dim height As Single = e.Graphics.VisibleClipBounds.Height

の width と height の値を確認してください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -