1 名前:最凶VB厨房 mailto:sage [05/02/26 00:00:13 ] VB.NETの質問全般です 過去スレ VB.NET質問スレ (Part9) pc5.2ch.net/test/read.cgi/tech/1106577850/ VB.NET質問スレ (Part8) pc5.2ch.net/test/read.cgi/tech/1102512868/ VB.NET質問スレ (Part7) pc5.2ch.net/test/read.cgi/tech/1096683017/ VB.NET質問スレ (Part6) pc5.2ch.net/test/read.cgi/tech/1088812165/ VB.NET質問スレ (Part5) pc5.2ch.net/test/read.cgi/tech/1078134703/ VB.NET質問スレ (Part4) pc2.2ch.net/test/read.cgi/tech/1065269043/ 【老若】VB.net質問スレ【男女】 (Part3) pc5.2ch.net/tech/kako/1056/10562/1056281084.html 【老若】VB.net質問スレ【男女】 (Part2) pc2.2ch.net/tech/kako/1043/10436/1043629429.html 【老若】VB.net質問スレ【男女】 pc2.2ch.net/tech/kako/1025/10258/1025848458.html
272 名前:デフォルトの名無しさん mailto:sage [05/03/14 15:55:47 ] >>271 ttp://dobon.net/vb/dotnet/control/lvitemsort.html
273 名前:デフォルトの名無しさん mailto:sage [05/03/14 16:03:41 ] >>272 ありがとん。 できました。
274 名前:デフォルトの名無しさん [05/03/14 18:42:38 ] -------------------------------------------------- Java -------------------------------------------------- public class Foo { public static void main(String[] args) { new Foo(); } public Foo() { } } と同等なコードをVB.NETで書きたいのですが、 New Foo()と書くと構文が違うと怒られるんですが、 こういう書き方はできないのでしょうか?
275 名前:デフォルトの名無しさん mailto:sage [05/03/14 18:48:24 ] >>274 VB.NETの構文を勉強してください。
276 名前:デフォルトの名無しさん mailto:sage [05/03/14 18:49:32 ] Java'erならC#使った方が良くね?
277 名前:デフォルトの名無しさん [05/03/14 18:50:00 ] >>275 嫌なんで、教えてください。
278 名前:デフォルトの名無しさん mailto:sage [05/03/14 18:51:22 ] わかった、ちょっと待ってな・・・
279 名前:274 mailto:sage [05/03/14 18:52:33 ] できればそうしたいんですが、 それができないんで○| ̄|_ VB冗長すぎる…。
280 名前:デフォルトの名無しさん [05/03/15 15:55:17 ] TextBox1をクリックしたりしてフォーカスがTextBox1に移動したときにLabel1.Textが TextBox1の説明文に変更されて、また別のTextBoxが選ばれたらLabel1.TextがそのTextBoxの 説明文に変更されるというようなプログラムを書く場合、 Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Click Label1.Text = "(TextBox1の説明文)" End Sub てな感じのを各TextBoxすべてについて書かなければいけないのでしょうか? 何か他にエレガントな方法はありませんか?
281 名前:名前は開発中のものです。 mailto:sage [05/03/15 16:00:45 ] まぁ藻前ら、それほどの技術と経験と根性があるなら、今まさに危機に瀕している↓のMMORPGを救ってくれ。 軽く問題に触れておくと、要は開発者が逃げ出しましたよと。 そしてそれに痺れを切らした3Dモデリング担当の人もプロジェクト脱退しましたよと。 そこで藻前らの力が必要になったわけで。。 この企画に参加、若しくは引継ぎすれば少なくとも藻前らのスキルアップにも繋がるだろうし。。 頼むよ。絶望に満ち溢れた世界に新たな風を吹き込んでくれ。藻前らの力で・・・・・・ 頼 ん だ ぞ rob2.jp/
282 名前:デフォルトの名無しさん mailto:sage [05/03/15 16:24:34 ] >>280 TextBoxのTagに説明文を入れて、 Label1.Text = CType(sender, TextBox).Tag.ToString() を全てのTextBoxのEnterイベント共通メソッドにする、とかどうよ。
283 名前:デフォルトの名無しさん mailto:sage [05/03/15 17:29:04 ] >>282 それは全てのTextBoxのEnterイベントを共通メソッドとして一括で書く方法があるということですか? それとも全てのTextBoxのイベントをひとつひとつ書かないといけないということでしょうか?
284 名前:デフォルトの名無しさん mailto:sage [05/03/15 17:43:04 ] なんでWebBrowserコントロールのドキュメント、MSDNに無いんだよ!!!!
285 名前:デフォルトの名無しさん mailto:sage [05/03/15 17:44:58 ] >>283 ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vbtskconnectingmultipleeventstosingleeventhandler.asp >>284 英語が読めない人は大変ですね。
286 名前:デフォルトの名無しさん mailto:sage [05/03/15 17:50:07 ] >>282 >>285 おお、百万の感謝を。
287 名前:デフォルトの名無しさん [05/03/15 22:54:31 ] RichTextBoxで100行目に書かれている1行をすばやく消す方法を教えてください。
288 名前:デフォルトの名無しさん mailto:sage [05/03/15 23:24:18 ] SendKeys "^({HOME})" For intCnt = 1 To 99 Step 1 SendKeys "{DOWN}" Next intCnt SendKeys "+({END}){DEL}"
289 名前:デフォルトの名無しさん [05/03/15 23:51:37 ] ↑こういうのって一般的なんですか?
290 名前:デフォルトの名無しさん mailto:sage [05/03/16 07:20:34 ] >>289 No
291 名前:デフォルトの名無しさん mailto:sage [05/03/16 12:55:13 ] >>287 WordWrapは考慮しなくてもいいの?
292 名前:デフォルトの名無しさん mailto:sage [05/03/16 17:06:23 ] Ctrl+Xで削除する行って、削除と同時に複写もするんですか?
293 名前:デフォルトの名無しさん [05/03/16 17:15:48 ] すみません。教えていただきたいのですが、 DatagridにListBoxを使用しています。 たとえば あああ いいい うううう えええ おおお のリスト中の「あああ」と「えええ」 を複数選択してそれを A列とB列に入れたい場合はどういうふうにすればいいでしょうか? リストボックスプロパティのselectionmode=MultiSimpleで複数選択はできました。 よろしくおねがいします。
294 名前:デフォルトの名無しさん mailto:sage [05/03/16 17:22:24 ] >>293 A列とB列はどこから出てきたんだ?
295 名前:デフォルトの名無しさん [05/03/16 17:41:04 ] >>294 SQLサーバーで従業員のデータを作成してdatagridで使用してます。 従業員の担当業務が複数あってそれを入れたいと思っています。 複数あるので担当業務の列を5つ設けています。 2つであればA列、B列。3つあればC列までって感じです。
296 名前:289 [05/03/16 22:04:52 ] >290 んじゃ〜正しいの教えてください。御願いします。 Select〜で選んで消さなきゃいけないのはわかるんですが、目的の場所にたどり着くのに えらいこと時間がかかるから、、、 せっかくLinesみたいなのがあるのに、その行を消せないし。
297 名前:デフォルトの名無しさん mailto:sage [05/03/16 22:15:29 ] APIのSendMessageでEM_GETLINEを送れば特定行の先頭インデックスを取得できる。
298 名前:デフォルトの名無しさん [05/03/16 22:49:10 ] Windows2000/XP でログオフ/終了/再起動ををするのをフックにして 動作するプログラムを書きたいのですが、どうやって判断すれば いいでしょうか?
299 名前:デフォルトの名無しさん mailto:sage [05/03/16 22:50:11 ] VB.NETでCABファイルを扱いたいのですが、専用のクラスとかは あるでしょうか。
300 名前:デフォルトの名無しさん mailto:sage [05/03/16 22:54:46 ] >>299 ない。
301 名前:デフォルトの名無しさん mailto:sage [05/03/16 23:20:05 ] >299 ttp://www.elguille.info/vb/utilidades/MakeCab_TypeLibrary_w2000.htm
302 名前:デフォルトの名無しさん mailto:sage [05/03/16 23:36:02 ] そろそろ、テンプレのリンクに色んなサイト追加しない? 漏れ自身は、結構良いサイト増えてきてると思ってる。 掲示板が設置してあるサイトをまとめてみたりすると良いかも。
303 名前:デフォルトの名無しさん mailto:sage [05/03/17 00:38:38 ] >>302 頼む
304 名前:デフォルトの名無しさん mailto:sage [05/03/17 11:48:34 ] >>292 Ctrl-X は切り取り
305 名前:デフォルトの名無しさん mailto:sage [05/03/17 16:51:33 ] VB.NETのソースはJavaのようにフォルダを階層構造にして 管理できますか?
306 名前:デフォルトの名無しさん mailto:sage [05/03/17 18:37:27 ] シリアルキー解析集「ALTEA」 大好評発売中! openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960? 市販SOFTやオンラインSOFTのパスワード集です。 オークション関係から画像・OS・表計算・CAD・・・・etc 国内・国外のあらゆる分野のSoftを解析済です。 これを初めて手にされた時には、驚愕される事でしょう。 そして・・・手当たり次第にインストールを始める筈ですw パソコンをご使用の方なら、必ず!満足されると思います。 解析結果のデータベースには15,000点を越えるパスワードが入ってます。 このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。 シェアウェアを購入して、正規登録したのと同じ状態になります。 余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。 シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも 多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^; WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。 オンラインSOFTを購入した経験は有りますか? ありとあらゆる分野の優れたSOFTが、数多くありますよね。 しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。 もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?
307 名前:デフォルトの名無しさん [05/03/17 21:10:23 ] だれかおしえて! datagrid使ってデータベース作ってるんだけど、 別のフォームで作成したデータベースのデータをComboboxを使って よびだしたとき、ほかのTextboxにComboboxを使って呼び出したデータと 同じ行の違う列のデータを表示させたいんです。 どうしたらいいですか?
308 名前:デフォルトの名無しさん mailto:sage [05/03/17 21:12:22 ] >>307 わけがわからんのでもうちょっと整理して。
309 名前:デフォルトの名無しさん mailto:sage [05/03/17 21:20:19 ] >>307 まさかプロじゃないだろうな?
310 名前:デフォルトの名無しさん mailto:sage [05/03/17 21:31:23 ] 「データベース作る」って何やってんだ?
311 名前:デフォルトの名無しさん mailto:sage [05/03/17 23:21:44 ] >>307 ComboBoxのSelectedIndexを使う 選択された行を認識して任意の列を取り出せばいいんでないの ValueMemberに抽出のキーとなるデータをほりこんでおいてそれで探してもいいけど しかしもう少し聞き方何とかならねぇのか?
312 名前:デフォルトの名無しさん mailto:sage [05/03/17 23:37:21 ] VB.NETにはRebarってありますか? あのツールバーの場所を移動したりするやつです。
313 名前:デフォルトの名無しさん mailto:sage [05/03/17 23:40:55 ] .NET Frameworkのライブラリにはない。.NET 2.0で追加される。 それまではサードパーティのを。どぼんとかに紹介もされてたはず。
314 名前:デフォルトの名無しさん mailto:sage [05/03/17 23:48:00 ] >>313 そうだったんですか。今年後半まで我慢ですね。 Twintailというソフト確認したら、それも外部のものを使ってました。 探してみます。ありがとうございました。
315 名前:デフォルトの名無しさん mailto:sage [05/03/18 00:15:56 ] フォームの左上に表示されるアイコンを条件によって 切り替えたいのですが、どうすればできますか?
316 名前:デフォルトの名無しさん mailto:sage [05/03/18 00:17:08 ] Iconプロパティを操作する
317 名前:デフォルトの名無しさん mailto:sage [05/03/18 00:25:59 ] >>316 それはそうなのですが、デザイナでIconプロパティを設定すると Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) みたいなコードが生成されますよね。この右辺部分を動的に変える 方法がよく分からないのです。リソースファイルみたいなものを 使うのでしょうか。
318 名前:デフォルトの名無しさん mailto:sage [05/03/18 00:42:11 ] >>317 ま、普通はリソースを埋め込むね。 ttp://dobon.net/vb/dotnet/programing/
319 名前:デフォルトの名無しさん mailto:sage [05/03/18 01:02:43 ] >>318 サンクス
320 名前:302 mailto:sage [05/03/18 04:24:31 ] >>303 頼むって・・・そんな・・・。 最凶VB厨房先生に頼まないとダメなのかしらねん。 まあ、いいや、ほどほどにあげとこ。 VB.NET初心者の館(初心者専用ですな) vbnet-iku2.hp.infoseek.co.jp/ PAPA'n VB (API 系のサンプルが結構ある) www.mitene.or.jp/~sugisita/index.html じゃんぬねっと(VB.NET だけでなく、C#, J# も、なんと VB6 も) jeanne.wankuma.com/ VB レスキュー花ちゃん(.NET 専用のコーナーがある) www.bcap.co.jp/hanafusa/dotnet/index.html 掲示板も紹介しようかと思ったけど、ここの人がいなくなるからやめた(w
321 名前:302 mailto:sage [05/03/18 04:26:35 ] あ、一応全部リンクフリーみたい。 てんぷらに合わせて書くとこんな感じ? VB.NET初心者の館 vbnet-iku2.hp.infoseek.co.jp/ PAPA'n VB www.mitene.or.jp/~sugisita/index.html じゃんぬねっと jeanne.wankuma.com/ VB レスキュー花ちゃん www.bcap.co.jp/hanafusa/dotnet/index.html
322 名前:デフォルトの名無しさん mailto:sage [05/03/18 09:36:17 ] MDBファイルにアクセスするプログラムを組んでいるのですが 「この接続に関連付けられている DataReader が既に開いています。この DataReader を最初に閉じる必要があります。」 というエラーメッセージが出ます。 Oracleへアクセスするプログラムの時は問題なかったのですが MDBファイルへアクセスするときはDataReaderが一つしか開けない ということでしょうか? これを簡単に回避する方法はないでしょうか?
323 名前:デフォルトの名無しさん mailto:sage [05/03/18 09:42:56 ] 開いた接続はさっさとClose。
324 名前:デフォルトの名無しさん mailto:sage [05/03/18 09:45:40 ] >>323 ネストしたい場合はどうしますか?
325 名前:デフォルトの名無しさん mailto:sage [05/03/18 10:05:19 ] 新たにコネクションを張る、Readerから取得したデータを変数に格納する、DataAdapterとDataSetを使った手法に変える。
326 名前:デフォルトの名無しさん mailto:sage [05/03/18 10:10:16 ] >>325 さんくす。うーん。どれにしようかな。 DataSetにするかなー
327 名前:デフォルトの名無しさん mailto:sage [05/03/18 11:24:45 ] >>320-321 Good Job!
328 名前:デフォルトの名無しさん mailto:sage [05/03/18 16:09:36 ] >321 3つとも知ってましたがなにか?
329 名前:328 mailto:sage [05/03/18 16:09:57 ] 間違えた、4つともだった。OTZ
330 名前:デフォルトの名無しさん mailto:sage [05/03/18 23:35:01 ] InstallShieldのスレってある?
331 名前:デフォルトの名無しさん mailto:sage [05/03/19 10:14:51 ] 以前はあったんだけどな。 インストーラー相談室 pc5.2ch.net/test/read.cgi/tech/997727326/ 過疎ってるけどageで質問すれば誰か来るでしょ。
332 名前:デフォルトの名無しさん [05/03/20 01:05:38 ] Dim a As String = "4+2*15/3" と 4+2*15/3 をStringで宣言し これを計算させて14という答えを導いて それを他の変数に代入するには どうしたらいいのでしょうか?
333 名前:最凶VB厨房 mailto:sage [05/03/20 02:12:03 ] 参照の追加 Microsoft.JScript Microsoft.Vsa '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Imports System Imports Microsoft.JScript.Vsa Imports Microsoft.JScript Public Class calc Public Shared Sub Main() Dim exp As String = "4+2*15/3" Dim ve As VsaEngine = VsaEngine.CreateEngine() Dim result As Double = CDbl(Eval.JScriptEvaluate(exp, ve)) '結果を表示 Console.WriteLine(result) Console.ReadLine() End Sub End Class 実行時の動的な式の評価 - Insider.NET www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18271&forum=7 どぼん!のプログラミング道のメルマガ dobon.net/vb/melma/dotnet34.txt
334 名前:デフォルトの名無しさん [05/03/20 14:32:30 ] >>333 遅くなってすいません。 ありがとうございました。
335 名前:デフォルトの名無しさん mailto:sage [05/03/20 14:57:20 ] For文で繰り返し処理しているときでもユーザーの入力を 受け付けるようウェイトをかけたいんですが?
336 名前:デフォルトの名無しさん mailto:sage [05/03/20 15:00:32 ] そう言う処理は別スレッドでやって下さい。
337 名前:デフォルトの名無しさん mailto:sage [05/03/20 15:23:34 ] そして別スレッドのコントロールを触ってあぼーん
338 名前:デフォルトの名無しさん mailto:sage [05/03/20 16:37:32 ] え、waitとかsleepとかないんですか
339 名前:デフォルトの名無しさん mailto:sage [05/03/20 16:38:05 ] 基本だな。
340 名前:デフォルトの名無しさん mailto:sage [05/03/20 16:41:32 ] >>338 あるけどね。お薦めしない。 UIスレッドはユーザとの対話だけやって、重い処理は別スレッドでやるべき。 VB6までの常識は捨て去れ。 .NETでマルチスレッディングは簡単になったし。 コントロールを別スレッドから扱うのは工夫が必要だが。
341 名前:デフォルトの名無しさん mailto:sage [05/03/20 16:47:13 ] >あるけどね。お薦めしない。 一応教えてください。
342 名前:デフォルトの名無しさん mailto:sage [05/03/20 17:36:07 ] >>340 >>コントロールを別スレッドから扱うのは工夫が必要だが。 コントロールを貼り付けたりする方法を教えてけれ。
343 名前:デフォルトの名無しさん mailto:sage [05/03/20 17:45:10 ] >>342 端的に言えばFormのInvoke/BeginInvokeメソッドを使え、と言う事。 ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=18718 その辺をキーワードにぐぐればいろいろ情報も出てくるだろう。
344 名前:341 mailto:sage [05/03/20 17:51:08 ] 342とは別人なんですが >あるけどね。お薦めしない。 一応教えてください。
345 名前:デフォルトの名無しさん mailto:sage [05/03/20 19:38:13 ] なんだ、バカばかりだな。
346 名前:デフォルトの名無しさん mailto:sage [05/03/20 19:47:09 ] そうだな。
347 名前:デフォルトの名無しさん mailto:sage [05/03/20 19:50:15 ] バカで悪いか?
348 名前:デフォルトの名無しさん mailto:sage [05/03/20 21:08:59 ] >>347 悪いのでは?
349 名前:デフォルトの名無しさん mailto:sage [05/03/20 21:51:06 ] 質問です。VBには先人の開発したモジュール郡を無料で配布管理してる サイトが存在しますか? perlではCPANというボランティア団体が大量のモジュールを提供していました。 (ALL英語なので敷居が高く挫折気味ですが..) MSDNを彷徨って探してみてのですが、膨大なコンテンツ群に圧倒され お目当ての物はみつけられませんでした。
350 名前:デフォルトの名無しさん mailto:sage [05/03/20 21:53:46 ] GotDotNetとかthe Code Projectとか。 ん? .NETの話だよな?
351 名前:デフォルトの名無しさん mailto:sage [05/03/20 22:18:06 ] ええと...単体で買うとNETでは無くなるのかな? 新しいの買ってこようと考えていますが... the Code Projectは英語表記ですね>< GotDotNetはあまり20-30くらいしかモジュールないのかな... ...英語面倒だとか贅沢いうな ハゲとか言わないでください..>< 簡易にオブジェクト組めるVBに興味が湧き出しているのですが できれば、モジュールを組み立ててコーディングしたいのですので
352 名前:デフォルトの名無しさん mailto:sage [05/03/20 23:06:31 ] .NET Frameworks自体が、でかいモジュールの集まりだと言えなくも ない罠。
353 名前:デフォルトの名無しさん [05/03/21 02:11:58 ] .NETでは6.0で書かれたVBソースって見れないんでしょうか? 今日電気店にて聞いたところ 「6.0で書かれたソースを.NETで開くと .NETの形式に変換されて表示されちゃう。」 と言われました。 当方ソースを閲覧できさえすればよいのですが エディタを使うしかないのでしょうか? .NETを使用して見れるとよいのですが…。 6.0は販売してないし…。
354 名前:デフォルトの名無しさん mailto:sage [05/03/21 02:18:20 ] 閲覧だけならテキストエディタで良いじゃんと思うんだが。 VSは一々重いし。 VBの色つけならそれなりのエディタが対応してるんじゃない?
355 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 06:52:08 ] >>354 それなりとは?
356 名前:デフォルトの名無しさん [2005/03/21(月) 08:18:33 ] >>354 重いってどこが?
357 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 08:51:59 ] おまいら>>353 の電気店ってほうが突っ込むべきところだと思うが。
358 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 11:00:25 ] >>357 思いません。
359 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 14:47:34 ] すいません、質問させてください。 IEのフォームにVB.NETで文字を自動入力させることは可能でしょうか? 注文ページに住所氏名電話番号など、自動入力できる常駐ソフトなど、 よろしければ教えてください。
360 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 18:24:38 ] 'Yahooにログイン.vbs '------------------- Set ie = CreateObject("InternetExplorer.Application") ie.visible = True ie.navigate "www.yahoo.co.jp/r/l1 " Do WScript.Sleep 100 Loop While ie.Busy With ie.document.forms(0) .item("login").value = "なまえ" .item("passwd").value = "ぱすわーど" .submit End With
361 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:13:14 ] AddHandlerで、イベントをデリゲートした場合、 明示的に、RemoveHandlerを呼び出さないと、ガベージコレクトされませんか?
362 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:26:52 ] 361ですが、 イベントハンドラ(イベントを関連付けたメソッド) を持つクラスのインスタンスをNothingしても、RemoveHandlerを呼び出していなかった場合、 ガベージコレクトされずに、メモリに残ることはないのだろうかということです。
363 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:34:14 ] ないよ。普通にGCされる。
364 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:44:02 ] >>362 VB.NETではリソースの解放は一切必要ないよ。 ベストは1秒間隔くらいで動くタイマ仕掛けておいて、 その中でSystem.gc.Collect()しとけば絶対リークなしだよ。
365 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:47:21 ] ReDimも解放されますか?
366 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:47:43 ] 無茶言うな。
367 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:48:45 ] >>365 されるよ。GCは最強。
368 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 19:57:32 ] そうですか。レスありがとう 一応、REmoveやっとけばいい話だけども。 ヘルプによると、 Event ステートメントで型が定義されて、 AddHandlerで、その型にインスタンスされるそうです。(デリゲートが?) >>364 そりゃないよ。
369 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 20:34:25 ] 一応技術的な解説をしとこう。 イベントは、対応する引数・返値を持ったデリゲートの一種のプロパティだ。 デリゲートというのは、メソッドへの参照リストを保持する特殊なクラス。 Event Hogeを宣言すると、VB.NETコンパイラは以下の操作を行う。 ・MulticastDelegateを継承するHogeEventHandlerクラスを作成する ・HogeEventHandler型のフィールドHogeを追加する ・メソッドadd_Hogeとメソッドremove_Hogeを追加する イベントの実体は結局の所デリゲートの派生クラスであるHogeEventHandler型のフィールドHogeである。 AddHandlerステートメントは、まずメソッドの参照をラップするHogeEventHandlerインスタンスを作成する。 その後add_Hogeを呼び出して、フィールドHogeと作成したインスタンスを合成し、新しくHogeとする。 これでHogeにはメソッドの参照であるHogeEventHadlerインスタンスのリストがあることになる。 //このリストは飽くまでインスタンスの参照のリストである、という点を忘れてはいけない。クラスインスタンスは全て参照でやりとりを行う。 RaiseEventステートメントを使うと、このメソッドリストを最初から順に実行していくわけだ。 さて、Hogeが持ってるのはHogeEventHandlerインスタンスのリストである。 それぞれのHogeEventHandlerインスタンスはこのHogeからしか参照されていないわけで、 Hogeが他から参照されなくなると、自動的に各HogeEventHandlerインスタンスも他からの参照はなくなる。つまりGCの対象となる。 ではHogeの参照を持っているのは、というと(SharedのEventでない限りでない限り)、 Eventを持ってるクラスのインスタンスが ・明示的にHogeにNothingを代入する(ただしVB.NETでは不可能) ・クラスのインスタンス自身が他から参照されなくなった といった状況だ。 つまり、クラスのインスタンスがGCされる状況では必ずHogeとHogeが持っているHogeEventHandlerインスタンス達もGCの対象になっているというわけだ。 あと、RemoveHandlerすればHogeからHogeEventHandlerインスタンス(の参照)が一つはずれる。 はずされたHogeEventHandlerは当然他からの参照されていないためGCの対象になる。
370 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 21:13:16 ] >>368 >そりゃないよ。 理由言ってみ。
371 名前:368 mailto:sage [2005/03/21(月) 21:13:47 ] >>369 ダラダラ分かりにくい解説ありがとう
372 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 21:33:35 ] >>371 俺は369じゃないが君人間として終わっとるな。