[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/09 11:51 / Filesize : 214 KB / Number-of Response : 894
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

VB.NET質問スレ(Part31)



1 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 17:44:56 ]
前スレ

VB.NET質問スレ(Part30)
pc12.2ch.net/test/read.cgi/tech/1242522019/l50

テンプレは>>2

46 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:30:42 ]
>>43
マルチステートメントはCase文でしか使わないな〜

Select Case hoge
 Case 1 : a = 2
 Case 2 : a = 3
End Select

47 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:32:17 ]
>>44
それはoption strict onだとcastしないといけないからキライ

48 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:35:14 ]
>>40
???だらけのソースだけど他のをみてもそうなので仕方なく
それに合わせる小心者なオレがいる。

49 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:37:57 ]
本物のプログラマはVBなど使わない。一般に、12歳以上になって VB を使うプログラマなどいない。

50 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:43:13 ]
>>45
なるほど、関心(感心?)した。

51 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:45:09 ]
腹へったじゃない。

52 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:48:04 ]
↑は否定、同意? 日本語って難しいな。

53 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:50:36 ]
中国語(北京語)なんか語尾の抑揚で意味が変わるらしいけどね

54 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:54:49 ]
否定や同意だけじゃないよ。

ヒント:
もぉ、おかけで仕事が増えちゃったじゃない。




55 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 16:07:05 ]
>>49
働いたことないの?言語選ぶなよ

マジレスだぞ☆

56 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 16:17:01 ]
C#で書いたものをVBのコードに変換すればいいじゃない

57 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 16:20:40 ]
プログラマの意図通りに100%変換できるものなの?

58 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:43:17 ]
>>39
誰も突っ込みを入れないので

Byte.Parse(str) は、10進数の変換で
Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier) としないと16進数変換になりません。

ついでに速度も測ってみた (結構いいかげんな測定なのであまり信用できないが)

(1) Dictionary(Of String, Byte)
(2) Convert.ToByte(str, 16)
(3) Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier)
(4) CByte("&h" & str)

(1)はジェネリックなハッシュテーブルに00〜FFをセットしてテーブル引きする方法でこれが最速
(1)を基準にすると速度は

(1) 1.0
(2) 1.8
(3) 2.8
(4)20.0

CByte("&h" & str) が予想外に遅い。
文字連結の "&" が遅いのかと思って連結をやめてもたいして変わらない。


59 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:45:46 ]
印刷ダイアログでファイルに出力をチェックして
***.prnファイルになったファイルを
VBでプリンタ(LPT1)に出力したいのですがどのようにしたら出来るでしょうか?

60 名前:59 [2009/08/24(月) 00:24:30 ]
すみません。出力したいのはLPT1ではなくて
USBにつないだ通常使うプリンタに設定したプリンタです。




61 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 01:02:17 ]
VBスレらしい質問でよいな〜

62 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 02:08:28 ]
>>58
マジか。CByteとかのChangeType系は
パフォーマンスが稼げるってMSDNに載ってたが、
一体、何と比較したんだろうなMS。

ParseがConvertより遅いのも意外だな。
Parseのが厳密に文字列表現を見るから、
速いかと思い込んでた。

63 名前:デフォルトの名無しさん [2009/08/24(月) 03:12:58 ]
>>58
CTypeのテストをする時に、
shareのエロ動画DLが始まったんだろ。


64 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 04:39:43 ]
>>62,63
俺も信じられなかったんで検証してみた
たしかにCByte(str)はConvert.ToByte(str, 16) より10倍程度遅かった

Val(str)はConvert.ToByte(str, 16)より早かった
Valの戻りはDoubleらしいのでバイト型に(暗黙の変換で)代入した

そしてここで驚くべき結果
CByte(Val(str))はConvert.ToByte(str, 16)より速い
Val(str))より若干遅いだけ

Cxx関数のヘルプ見ると、インラインコンパイルされるのでパフォーマンスが向上するときもあります、とw
CByte(string)は遅いがCByte(Double)はかなり早い

CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ




65 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 06:11:07 ]
Utils.IsHexOrOctValue() ってのが遅そうだな。


66 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 19:49:06 ]
>>63
そういうもんにはDL専用のPCがあるw

>>64
Valなんて前世紀の遺物くらいに思っていたがやるもんだな〜

>CByte(string)は遅いがCByte(Double)はかなり早い

それは、.NETのボックス化、アンボックス化が絡んでいると思う。
参照型と値型の相互変換が遅いってやつ。

67 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:00:25 ]
何を訳のわかんないことをしたり顔で言ってるんだw
どう考えてもそんなもの無関係

68 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:05:42 ]
>>64
CByte(Val(str))とVal(str)は同じコードが生成されているので速さの違いは測定誤差だと思う。

>>67
では何が関係しているのでしょう?


69 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:14:03 ]
クリップボードからrichtextboxに貼り付けるとき、
gettext で 例えば aa の間に bを挿入したいんですが、
これやると aab になっちゃんです。 
対処法お願いします。

70 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:14:05 ]
>>64
>CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ

CByte(str)   ⇒ Conversions.ToByte(str)
CByte(Val(str)) ⇒ CByte(Math.Round(Conversion.Val(str)))

全然違うものになってる w

71 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:31:24 ]
>>14
皮肉にもVB厨な構文の勝利に終わったわけだなwww

72 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:34:54 ]
>>65
それが速さの原因

73 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 23:00:14 ]
>>47
VB9からIf演算子が追加されたよーC系の?:演算子と同等の記述ができるよー

74 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:11:34 ]
>>67
>では何が関係しているのでしょう?

いくらなんでもボックス化は関係ないわ




75 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:21:01 ]
>>74
なんで?

76 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:26:38 ]
ボックス化って何なのさ。
厨なオレに分かるように説明してください。

77 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:27:48 ]
タカ&トシの新しいネタです

78 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:05:11 ]
>>76
LabelからTextBoxに値を入れること。
Label同士、TextBox同士の値の代入は速いが相互にやると遅い。
ComboBoxとTextBoxの間では速度低下はない。

79 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:13:04 ]
Sub aaa(ByVal hoge as hogeClass)
とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう?
Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの?

80 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:19:55 ]
> とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう?
hogeClassが参照型だから

> Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの?
ディープコピー作るとか構造体にするとかあるけど
まあ普通気にしないでいいよ

81 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:33:14 ]
>>79
変数hogeの中に入っている「値」とは、hogeClassのインスタンスの
メモリ上の位置を表す「値」だから、とでも考えるよろし。

書き換えられたくないのなら、インスタンスのクローンを作ってそれを渡す、とか
ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて
aaaはそのインターフェイスを引数に取るようにする、などの工夫が必要。

参照型と値型の違いとそれぞれの意味は、最初にちゃんと理解しとかないとマズいね。

82 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:48:07 ]
>>81
>ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて

元のメンバーをPrivateにして新しくPublic ReadOnlyのを作るわけですか?

83 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:50:40 ]
横レスだけど何で.NETにはC++のconstな値渡しみたいなのは無いのだろうか。

84 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 03:20:32 ]
constな値渡しって何?



85 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 07:05:39 ]
>>84
ttp://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/const.html


86 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 07:54:52 ]
dクス
半分くらいわかった。

87 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 07:59:42 ]
DataGridViewで行を下げて行くにはどうすればいいでしょうか?
ループを使いたいと思っています

for i = 0 to 10
DataGridView1.Rows(i).Cells(1).Value = 0
next
↑ではエラーが出てお手上げ状態です
お願いします

88 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:51:02 ]
行を下げるっていうのは、下の行を表示させるということ?

89 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:37:21 ]
どういうエラーが出てどうお手上げなんだよ
やりたい事をもっと正確に書けよ

90 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:41:41 ]
全然意味わかんねーけど、多分行が11行もないんじゃないの

91 名前:87 mailto:sage [2009/08/26(水) 20:23:07 ]
すいません詳しく書くと
別のDataGridView(DataGridView2とします)の行数をRowCountでiに行数を入れており
DataGridView2と同じ行数で内容は入っていないDataGridView1が出来ています
iが3だとするとDataGridView1のRows(0)からRows(2)までに0を入れたいと考えています

そこでループで行けるかと思い>>87のコードでやってみたところRowsの()の中は変数は使えないみたいでした
再度よろしくお願いします・・・

92 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:28:09 ]
どうしてエラーの内容を隠匿しようとするんだろうね?

93 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:29:55 ]
使えるから。

94 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:34:11 ]
詳しいエラー内容

イミディエイト ウィンドウ
'System.ArgumentOutOfRangeException' の初回例外が mscorlib.dll で発生しました。

例外ヘルパ
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index
ArgumentOutOfRangeException

i = DataGridView2.RowCount
が問題でしょうか?



95 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:42:58 ]
そんなコード書いてないじゃん。

>>90 の言うとおりだな。

96 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:44:07 ]
こいつには教えなきゃならんことが多すぎて教える気もなくなるわ

97 名前:87 mailto:sage [2009/08/26(水) 20:45:06 ]
すいませんでした。失礼します

98 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:56:44 ]
String型は値型なのでしょうか参照型なのでしょうか?

99 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:59:36 ]
ttp://msdn.microsoft.com/ja-jp/library/system.string.aspx
VB だと Class か Structure かで分かる

100 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:06:41 ]
>>99
参照型ですね。
でも他の参照型と違う動きをしますよね。(謎

101 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:07:03 ]
>>87
とりあえず動いた。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  '列の設定
  Me.DataGridView1.ColumnCount = 1
  Me.DataGridView2.ColumnCount = 1

  'グリッド1に3行追加
  Me.DataGridView1.Rows.Add("hoge1")
  Me.DataGridView1.Rows.Add("hoge2")
  Me.DataGridView1.Rows.Add("hoge3")

  'グリッド2にグリッド1の行数を追加
  Dim Count As Integer = Me.DataGridView1.Rows.Count
  Me.DataGridView2.Rows.Add(Count)

  'グリッド2に値を代入
  For i As Integer = 0 To Count - 1
   Me.DataGridView2.Rows(i).Cells(0).Value = "hoge" & (i + 1).ToString
  Next

End Sub

102 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:45:19 ]
>>100
不変クラスとかimutable classで調べてみると分かる。

103 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:07:15 ]
>>102
ぐぐったらJavaのばかり出てきました。
上のほうで出てきてるシャローコピーとかディープコピーとかもJavaですね。

104 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:11:22 ]
どれも概念の話であって言語は関係ないな



105 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:19:38 ]
そういう概念ってVBだけやってると永久に辿り着けそうに無いな。。

106 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:23:18 ]
VB的にはStringは基本型のひとつという位置づけ。
でも不変参照型というのが分かってないと
なんでStringBuilderが必要なのか理解できない。

107 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:40:22 ]
>>106
それは参照型のString型を値型と同等に扱える仕組みと言うことで理解してOK?

108 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:43:20 ]
よくない

109 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:45:30 ]
>>108
Orz

110 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:50:42 ]
VB.Netで不変参照型なのはString型だけなの?

111 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:58:55 ]
そういう風に設計すればいくらでも
標準ライブラリでぱっと思いつくのはSystem.Drawing.Font

112 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 07:37:08 ]
>>111
有難うございます。
System.Drawing.Font 見たけど不変参照型みたいな事は書いてないですね。
不変参照型って自分でも作れるんですかね。。

教えてくんになってしまっているので自分で勉強して出直してきます orz

113 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 10:34:53 ]
クラスと構造体を別々に作るのと、クラスの中に構造体を作るのとでは、
どういう違いがあるのでしょうか
ストラクチャ名だけでインスタンスを作るとグローバルな感じで、
入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、
どの目的のための構造体なのかがわかりやすい、というだけ?

あと、構造体のインスタンスは
  Dim Hote As [ストラクチャ名]
これで暗黙的にNewされてインスタンスが作られている、
という理解で間違いないですか?

114 名前:113 mailto:sage [2009/08/27(木) 10:36:49 ]
あ、それと下の質問がその通りであれば、
  Dim Hoge As [ストラクチャ名]
  Dim Hoge As [ストラクチャ名] = New [ストラクチャ名]
この2つは同義で、どっちを使ってもおkということですか?



115 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 11:01:04 ]
ストラクチャ名……なんだろうこの違和感

ネストされた型の大きなメリットはアクセス制御をPrivateやProtectedにできること
内部の型から外部の型のPrivateメンバにアクセスできること

> 入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、
> どの目的のための構造体なのかがわかりやすい
名前空間と型名だけで表現できてなかったらすでに命名がまずい

> この2つは同義で、どっちを使ってもおkということですか?
IL レベルで違いはあるがまあ同じと考えて良い

116 名前:113 mailto:sage [2009/08/27(木) 12:44:11 ]
>>115
ありがとうございます、よくわかりました
違和感のところはすみませんでした

117 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 18:19:23 ]
>>101までの流れを読んでて思ったけど、
真面目に回答してた奴は、
質問者が拗ねてしまって、
危険な流れとばかりにスルー。
煽った奴は、相手がスレからつまはじき者にされて
自分の煽りの影響力にご満悦。

>>101のようにスレのルールに忠実な結果報告だけが
残る。2chって無責任な場所ですよね。
10年前から知ってましたが。


118 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 18:36:43 ]
今更痔ろう

119 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 20:11:54 ]
10年前にこっ酷い目に会って、今漸く帰って来たのですね。わかります。
でないと、こんな青臭いレスなんてできないよな。

120 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 20:57:56 ]
わかります(笑)
こういうのに限って「スイーツ(笑)」とかやってたりするんだよねw

121 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 02:38:25 ]
だよねw

122 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 03:48:15 ]
>>119
「青臭い」って・・・実際、他人に使ってみたことある?
きっと、言われた方は、喜ぶと思うよ。


123 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 07:57:52 ]
イカ臭い

124 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 08:02:29 ]
きっと、言われた方は、喜ぶと思うよ。



125 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 10:51:05 ]
WindowsVista64Bit VS2008で開発してます。
ある画像を表示する為に、APIのStretchDIBitsを使用しています。
ピクチャーボックスのPaintイベントで画像を描画する為、
引数のe.GraphicsからHDCを取得して使っています。
このHDCですが、なぜかLabelなどに一度値を出力しないと、画像が描画されないんですが、
似たような経験された方はいらっしゃらないでしょうか?

126 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:26:52 ]
>>125
画像のパスを設定するとか
外部の設定によって描画内容(描画ロジック)に変更ある?
変更あるなら変更のタイミングで描画命令を発行
変更ないならロジック晒すべし


127 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:27:02 ]
>>125
初め表示される時には、画像が無かったってオチかなあ。
XPと違ってVista以降はあまり再描画が発生しないし。
偶々そのLabelの変更がきっかけになっている、とか。

ウィンドウ表示後に画像が用意されるのなら、
ピクチャーボックスを明示的にInvalidateなりしないと。

128 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 05:45:41 ]
俺125じゃないけど、基本的なこと聞いていい?

Paintイベントのヘルプみると
>コントロールが再描画されると発生します。
ってあるんだが、これは

コントロールが再線画されようとしたら発生
コントロールの再線画が完了したら発生

のどっち?
日本語を素直にとらえると後者なんだが、
例とかみてると前者じゃないとおかしな動作しそうだし

129 名前:デフォルトの名無しさん [2009/08/29(土) 11:17:18 ]
コントロールで質問です
コマンドボタンのような見た目で、押した時に凹んだままになり、
もう一度押すと元に戻るボタンをなんというのでしょうか?

130 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:23:17 ]
>>129
トグルボタンかな

131 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:24:01 ]
旧VBを知らないからコマンドボタンというのがなんなのかは知らんが、
トグルできるButton風のコントロールはCheckBoxで扱う

132 名前:129 [2009/08/29(土) 11:25:31 ]
>>130-131
もうコマンドボタンっていわないんですね、失礼しました
ありがとうございました

133 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 12:50:01 ]
>>128
コントロールが<コントロール自身によって>再描画されると

134 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 15:17:36 ]
>>133
コントロールの描画は、OnPaintメソッドで行われるらしいので、
このメソッドの中でPaintイベントを発生させてるってこと?

そうなると、描画が完了してからイベント起きるか、完了まえにイベント起きるかは
そのコントロールの実装次第、ってことになるのかな?



135 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 16:08:57 ]
だから、省略してある言葉を補った文章のとおりでしょ

『コントロールが<コントロール自身によって>再描画されると』

これを描画前に呼ばれる可能性もありうると読み取るようなら、
日本語のセンスがちょっとヤバいんじゃないかと思うけど。

136 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:35:35 ]
Paintイベントを発生させるControl.OnPaintをいつ呼ぶかは、実装に拠るからなあ。
Control.OnPaintのサンプルだと頭で呼び出しているけど。

137 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:09:36 ]
だから、MSDNライブラリっていうのはチミやオレが実装したコードについて、
ではなく、MSの中の人が実装したコードについて「こうなってます」っていう
解説書だから、そういう物言いはナンセンス以外の何物でもない。
当たり前のことだと思うんだけどね。

138 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 04:00:29 ]
Paintイベントは、
コントロールが再描画された後、追加の描画をユーザーに提供する目的で発生します。
一部のコントロールではこのイベントが発生しないこともあります。

こんな感じ?

139 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 04:26:41 ]
そもそもMSDNで日本語を正確に読み取ろうとしても意味はない。
正確に読み取りたければ英語のを読め。


140 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:16:21 ]
>>128
Paintイベントはコントロールが再描画されようとしたときに発生するから。
なので、コントロール自身の再描画処理は、MyBase.Paint()で行う。
このMyBase.paint()を呼ばなければ、コントロール自身の再描画は行われない。

141 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:31:09 ]
全然違う
コントロールの描画処理はOnPaintというメソッドの中に書かれている。
描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ。(呼ばなくてもいい)
ControlクラスのOnPaintメソッドの中にはPaintイベントを発生させる処理だけが書かれており,
Paintイベントが発生する。
だから,派生クラスを作ってOnPaintをオーバーライドしてその中に描画処理を書けば
基底クラスの描画処理は行われない。

142 名前:140 mailto:sage [2009/08/30(日) 22:17:53 ]
すまん、MyBase.OnPaint()の間違い。
あと、一番最後の「コントロール自身の再描画は行われない。」は「基底クラスの描画処理が行われない。」
の間違い。
いいたかったことは、>>141と同じこと。

143 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 04:22:17 ]
>>141
>描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ
これなんだが、MSDNの例だと最初に呼んでる
最後に呼ぶと線画完了後にイベント起きることになる

俺がMSDNで調べた限りでは、
まず、最初にMyBase.OnPaint(e)を呼び出し、Paintイベントを発行させて、
その引数eをもとにレンダリングするのが正しい作法じゃないかな

したがって、
Paintイベントは再描画される前に発生し、そのイベントの引数により描画内容を変更することができる
が正解だと思う

実際すべてのコントロールがそのように実装されてるかどうかはしらね


144 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:42:22 ]
実際にはすべてのコントロールが描画後にMyBase.OnPaintを呼んでる
通例,On○○をオーバーライドするときには基底クラスのOn○○を先に呼ぶことが多いんだけど
OnPaintの場合は後で呼ばないとPaintイベントで描画した内容が見えなくなるだろ



145 名前:144 mailto:sage [2009/08/31(月) 10:03:26 ]
捕捉
コントロールがControlクラスから直接派生している場合は,OnPaintには何の描画処理も書かれておらず,
ただPaintイベントを発生させる処理だけが書かれているので,後で呼ぶことができる。
こうしておけば,コントロールのユーザがPaintイベントを使うことによって描画を上書きできる。
でも,Buttonなど既にOnPaintに描画処理が書かれているコントロールから派生する場合は話が違ってくる。
そのようなサンプルで先にOnPaintを呼んでるのは,まず基底クラスに描画させてその上に描画するため。
その場合,その自作コントロールのPaintイベントは描画が行われる前に呼び出されてしまうので使えなくなる。
(そのコントロールのユーザがPaintイベントで描画してもOnPaintでの描画に上書きされてしまうから)

146 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:58:56 ]
言っちゃ悪いけど、そんなこと普通MSDNの記述を読んでちょっと考えればわかる
当たり前のことじゃないか?

少なくとも俺はそうだったが・・・






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<214KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef