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
598 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 19:34:13 BE:104814869- ] みんなでbe付ければ解決。
599 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 20:06:46 ] >>594 で?君は?
600 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 20:20:52 ] >>598 おお、こんなのあったんだ。 で、beってどうやって付けるの?
601 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 22:33:41 ] 他の人のベンチマークまだぁ?
602 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 22:51:44 ] >>601 お前のは?
603 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 23:17:50 ] >>579 のデータがおかしいと言うのなら、まず自分で数値出さないとねぇ。 C#とVB.NETなんて速度ちっとも変わらねぇよとでも言いたいのか? そう言いたいならハッキリそう言えばいい。
604 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 23:29:21 ] 折れのでは、C#:VB.NET = 1:1 だった。 変わんない
605 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 01:58:32 ] C#とVB.NETに速度の違いがあるとすると整数のオーバーフローチェックの デフォルトの違いくらい。それほど違いが出るものかな? /removeintchecks /checked
606 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 05:06:16 ] 関数使ってると変わってくるんじゃないのか
607 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 09:38:39 ] >>603 それ以前の問題であることに早く気付いてください。 >>590 とかで乱暴ながらも指摘されてるのに 気付かなかった?
608 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 10:06:37 ] > まず自分で数値出さないとねぇ。 利用規約違反ですね。タイーホします。
609 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 10:33:22 ] >>608 だな。 おまえら、EULAをちゃんと嫁。 このうんこやろう。
610 名前:デフォルトの名無しさん [2005/04/04(月) 10:33:49 ] If button Is TBB0 Then 'TBB0のときに必要な処理 ElseIf button Is TBB5 Then 'TBB5のときに必要な処理 End If ↑こんなコード(button、TBB0、TBB5はいずれもButton型) をSelect Caseで整理しようとしてるんだが、Select Caseでは Button型は使えないみたいで、CObj()を通してもだめで、 しかたなく Select Case button.Text Case TBB0.Text 'TBB0のときに必要な処理 Case TBB5.Text 'TBB5のときに必要な処理 End Select こんなごまかしで動かしていますが、もっとうまい方法はないものでしょうか? (TBB0.Text=TBB5.Textになっちゃうとおかしくなりますし)
611 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 11:07:56 ] >>610 どうしてもというなら.Nameで分岐するとか。
612 名前:610 [2005/04/04(月) 12:07:59 ] >>611 うう、ありがとうごぜぇますだ。さっそく試すべ。。。 あれ、なんか違うかも?ん?、Button型じゃなくてToolBarButton型? え、なんでNameプロパティないの? すみません、質問するまえにもうちょい下調べしないと。 でもオブジェクトを確実に識別できるプロパティを探せばいいわけだし、 がんばってみます。
613 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 12:27:50 ] >>607 いちいちソース書くのめんどくせ
614 名前:デフォルトの名無しさん [2005/04/04(月) 12:42:10 ] 下手したら30代超えのオッサンが「うんこ野郎」だの「タイーホ」だの言ってるかと 思うと反吐が出るな。 幼稚臭っ。キモ過ぎる。
615 名前:デフォルトの名無しさん [2005/04/04(月) 12:43:25 ] なんでVB使いにはこんな幼稚な奴が多いんだ?
616 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:02:32 ] >>612 .Tagがあるなら、好きなのを定義して分岐のキーにできる。
617 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:11:07 ] ToolBarButtonなら、ToolBarのButtons.IndexOf(button)でインデックスベースという手もあるが。
618 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:35:05 ] >>610 ヘルプぐらい読め。
619 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:59:12 ] >>613 発想がおかしい。省略していいかどうかの判断ができていない。 それにソースだけではないとも指摘されているが それについて触れようともしていない。 結論。アホ。
620 名前:610 [2005/04/04(月) 18:02:49 ] >>616 Tagは真っ先に考えたのですが、フォームが多数あって Tagを入れ忘れるやつがいないとも限らないので (VBのToolbarでKeyの入れ忘れを散々やってます(汗)) 他の方法がないかと勉強してたところなのです。 (入れ忘れさえなければいい方法なのですが) >>617 With TB1.Buttons Select Case .IndexOf(button) Case .IndexOf(TBB0) Case .IndexOf(TBB5) こんな感じになりますた。だいぶすっきりだし、判定もまちがいなさそうです。 >>618 すまぬ。ヘルプみたのだがいい方法が見つからなんだ。
621 名前:デフォルトの名無しさん [2005/04/04(月) 19:41:17 ] 素直にIf...ElseIfで書いたほうが後々理解しやすいと思うけど。。
622 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 20:25:05 ] これのことかと思ったんだけど、勘違いかな? ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtsktriggeringmenueventsfortoolbarbuttons.asp
623 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 20:26:18 ] >>621 まあまあ。こういう輩にそんなこと言ったって わかんないんだって。分かりやすいプログラムを書ける人が PGとして高く評価されることにそのうち気付くかなぁ。
624 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 20:57:04 ] >>621 現場の事わかってない厨か学厨でしょ しょせん 自分でマスかいて、高度な事やってるつもりでも 周りはいい迷惑なんだって おまえが責任もって最後まで虫取り保守やれっていいたくなる
625 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 21:14:15 ] やっぱり、バカが集まるところだ。ここは。
626 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 21:28:21 ] >>624 現場を気取ってるが多分学生だな。 多分本当に現場にいるPGなら後半2行にそのことを 露呈した記述があることにすぐ気付くと思うが。 >>625 はそれを指摘してるんだよな。
627 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 21:35:33 ] 一人芝居が上手なスレはここですか?
628 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 21:44:22 ] >>626 げっ ばれましたか さすがです...ショボーン
629 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 22:08:57 ] >>626 はい。626は私ですよ。 一人芝居は>>627-628 ですね。 それじゃ。
630 名前:629 mailto:sage [2005/04/04(月) 22:09:38 ] あー、アンカーは626じゃなくて628にするべきだったね。 まーどうでもいいけど。
631 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 22:13:44 ] >>619 数値だけ出して読む側がそれを信じようが信じまいが問題なし 別に何をどう書こうが自由だしw
632 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 22:55:13 ] >>631 まだ分かってないみたい。信じる信じない以前に 判断を下しようがない、って言ったら分かる? 分かりやすいように、君がやったことを極端な例にしてあげようか? パフォーマンス測定しました! VB.NETは1秒、C#では100秒でした。 終わり。
633 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 23:50:52 ] >>632 まだ分かってないみたい。読み手が判断を下す以前に 何を書こうがどんな書き方をしようが自由だって言ったらわかる? 終わり。
634 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 23:53:12 ] >>633 それはいいけどその後の君の対応はNG。
635 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 23:55:05 ] >>633 はいはい。このスレを君の落書き帳として使わせてくださいってことね。 それに対しては「いいよ、通報されない程度にね」としか 言いようがないな。
636 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 23:55:59 ] >>633 分かりました。あのデータがどんな条件やどんなソースから 得られた数値なのか興味があるのですが、提示して頂けませんか?
637 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 23:56:14 ] >>634 どんな対応をしても自由だしw、NGだと思っているだけだろう
638 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:03:29 ] 必死になりすぎて恰も別人を装っているかのように思える。 >>635 もし荒らしだと思っているなら、それに反応するのも荒らしだな。 荒らしを助長していることになる。 >>636 めんどくせ
639 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:17:07 ] >>638 捏造データ?じゃないですよね。 ソースはもう消してしまったんですか?
640 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:20:41 ] >>639 ごめんなさーい、もう消してしまったんですぅーm(_ _)mペコリ
641 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:24:12 ] >>640 ふーん
642 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:26:58 ] >>641 あきらめてね〜
643 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:41:21 ] >>642 ソース見て叩こうと思ったけど無理みたいだから諦めます。
644 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:42:51 ] >>642 よっぽど他人には見せられない代物だったんだろうなぁ。
645 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 00:50:21 ] >>643 暇つぶしができると思って期待してたのかな?相手できなくてごめんね >>644 見せられないのではなく、何度も言っているように見せるのがめんどくさいんだよ。 やっとわかってくれたかな?
646 名前:質問age [2005/04/05(火) 00:57:13 ] しつもんです!そもそも>>633 さんは何が訊きたかったのでつか?
647 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 01:01:22 ] >>646 その何かがわかるまでスレッドの中を何度も繰り返し読んでみよう! きっと何かがわかってくるはずだよ。
648 名前:646 mailto:sage [2005/04/05(火) 01:13:06 ] 世の中は春休みだという事がわかりますた。。。_| ̄|○
649 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 01:14:26 ] わかるの遅っ
650 名前:最凶VB厨房 mailto:sage [2005/04/05(火) 01:14:47 ] 世の中は春休みだったのか・・・。 俺がいる世界はもしかしてあの世なのか?! こりゃまいったわぃ
651 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 01:23:38 ] わかるの遅っ
652 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 07:07:22 ] >>645 あれー?削除しちゃったんじゃなかったんだー。 コロコロ変わるねーw
653 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 09:09:00 ] 普通に組んでC#の方が速いならC#で作りたいなぁ
654 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 09:12:28 ] 普通に組んでC++の方が速いからC++で作るといいよ。
655 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 09:19:03 ] C++は難しいのでやめておきます。
656 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 09:36:16 ] >>652 削除したことどこでも否定してないけどw 頭大丈夫? まぁ、めんどくさいと言っても削除しちゃったから見せることすらできないけどねw
657 名前:デフォルトの名無しさん [2005/04/05(火) 16:40:23 ] www.atmarkit.co.jp/fdotnet/winexp/index/index.html ↑サンプルアプリケーションがあったのでちょっと拝見 しかし、こんなもの見て「よし、これやってみよう」なんてプログラマいないよな? まんど臭い機能つけて後で突っ込み浴びて却下とかなったら、破壊したくなるもんなあ。 Sのプログラマは駄目かと思われ・・受身が一番で常。 ただRAD手法は絶対必要だと思う。んでもって強気にいかないと(仕様変更をあの手この手で防がないと)、納期に間に合いません! フィックスって言ってたやん・・なんて愚痴は何百回言ったことでしょうか・・
658 名前:デフォルトの名無しさん mailto:sage [2005/04/05(火) 23:54:06 ] >>656 >>656 >削除したことどこでも否定してない まさにあなたはそこを突っ込まれたのですよ。 理解してから書くか、理解できてないのならダンマリでよろしく。
659 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 00:58:46 ] そろそろウザいので相手するな。
660 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 03:24:21 ] >>658 いやぁ以前にも書いたけどどんな書き方しようが自由だからね。 そんなに僕ちゃんのおふざけが気に入らなかったかなw
661 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 07:11:59 ] >>659 うん。
662 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 11:31:39 ] あるプロセスが起動中か確認したいのですが どうのようにすればよいでしょうか? 例えばhoge.exeか起動中かどうかというのを 確認したいです。
663 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 11:40:31 ] System.Diagnostics.Process.GetProcessesByName
664 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 11:43:15 ] >>663 さんくす
665 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 15:03:27 ] >>661 アホだったらいちいち相手しないよ。
666 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 16:05:06 ] WebBrowserコンポーネントで開いたExcelのイベントを取ることは可能だろうか?
667 名前:初歩的な質問なのですが [2005/04/06(水) 16:05:18 ] 初歩的な質問なのですが、vb.netを使ってアプリケーションを作成し、 セットアッププロジェクトでインストーラーを作成しています。 その際に作成した「プロジェクトファイル名\obj\Release」に作成したアプリケーションが出来ますが、 これをセットアッププロジェクトの「アプリケーションフォルダ」にドラックアンドドロップして、作成したアプリケーションを含めてビルドを行うと、依存関係が見つかりませんと出ます。 アプリケーション単体でビルド行った際には出ないのです。 もちろん、必要なCOMなどは参照設定で登録しております。 これは何が問題なのでしょうか?
668 名前:デフォルトの名無しさん [2005/04/06(水) 20:51:32 ] >>667 理解しようとする意欲がないのに、最初からいきなり複雑なことを 成し遂げようって発想が理解できない。 韓国人のパリパリとかいう主義みたい。 そういう場合はまず手始めにフォームだけの空っぽのアプリのインストーラを 作ってみる。小学生でもわかる定石でしょ。 話はそれから。
669 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 22:28:25 ] 年齢を生年月日から求めたいのですが DateDiffで年の差を求めると月/日が無視されてしまいます。 困りました。
670 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 22:37:12 ] DateTimeのSubtractメソッド、TimeSpanのTotalDaysプロパティ、除算。
671 名前:デフォルトの名無しさん [2005/04/06(水) 22:40:51 ] >>669 はただ「困った」って言ってるだけじゃん。 何も質問してないぞ。
672 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 22:42:07 ] >>670 それって365日と366日で結果が違ったりしませんか? 超てきとー >>671 (・∀・)ニヤニヤ
673 名前:デフォルトの名無しさん [2005/04/06(水) 23:25:48 ] VBを始めようと思っているのですが、周りの人はCにしておけといっています。 VBの欠点を教えてください。
674 名前:デフォルトの名無しさん [2005/04/06(水) 23:49:21 ] >>673 数日前もだれかに言った気がするが・・・ 馬鹿に思われるからやめなさい
675 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 00:59:11 ] >>673 早く挫折できる。
676 名前:デフォルトの名無しさん [2005/04/07(木) 11:34:46 ] 以下のようなエラーが出ます。 > 'System.ObjectDisposedException' のハンドルされていない例外が mscorlib.dll で発生しました。 > 追加情報 : 閉じている TextWriter に書き込むことはできません。 エラーが出るのは下のソースで「_WriteText.Flush()」です。 Finalize()でFlush()を呼ぶ前にClose()は呼んでません。 なぜこんなエラーが返るのか検討がつきません。知っている方、ご教授願います。 Public Class TextOut Private _FStream As FileStream Private _WriteText As StreamWriter Public Sub New() _FStream = New FileStream("log.txt", FileMode.Append, FileAccess.Write) _WriteText = New StreamWriter(_FStream, Encoding.GetEncoding("Shift_JIS")) End Sub Protected Overrides Sub Finalize() _WriteText.Flush() _WriteText.Close() _FStream.Flush() _FStream.Close() _WriteText = Nothing _FStream = Nothing MyBase.Finalize() End Sub End Class
677 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 13:24:02 ] .NETでの正規表現の質問はここでいいのでしょうか。 パターンAからパターンBが「最初」に出てきたところまで、 というパターンを作りたいのですがうまく行きません。 pA〇〇〇〇〇pBpA×××pBpA△△△△△△△△pBpA・・・・ ↑から pA〜pBまでのセットを取りたいのです。 ここで、 pA.+pB とやると最初から最後まで引っかかってしまいます。 ただ、 pA[^pB]+pB とやれば意図したように動くのですが、 実際にはパターンA、パターンBとももう少し複雑なので なにかいい方法はないでしょうか。
678 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 13:25:30 ] 最短一致は「?」
679 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 13:30:19 ] VB.NETの質問スレだろ?なんでVB否定するヴォケがいるの?ROMってろよ、ゴラァ
680 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 14:43:02 ] >>678 ありがとん pA.+?pB で思うようにできました。
681 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 17:40:37 ] 普段はエラーなど起きないのに、ごく稀に発生するエラーに悩んでおります。 発生するエラーは2種類あります。 System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 at System.Data.Common.Dbnetlib.ConnectionError(HandleRef pConnectionObject, IntPtr& netErr, IntPtr& netMsg, IntPtr& dberr) at System.Data.SqlClient.TdsParser.ProcessNetlibError(IntPtr errno) at System.Data.SqlClient.TdsParser.ReadNetlib(Int32 bytesExpected) at System.Data.SqlClient.TdsParser.ReadBuffer() at System.Data.SqlClient.TdsParser.ReadByteArray(Byte[] buff, Int32 offset, Int32 len) at System.Data.SqlClient.TdsParser.ReadEncodingChar(Int32 length, Encoding encoding) at System.Data.SqlClient.TdsParser.ReadValue(_SqlMetaData md, Int32 length) at System.Data.SqlClient.TdsParser.ProcessRow(_SqlMetaData[] columns, Object[] buffer, Int32[] map, Boolean useSQLTypes) at System.Data.SqlClient.SqlDataReader.PrepareRecord(Int32 i) at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values) at System.Data.Common.DbEnumerator.MoveNext() at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.Repeater.DataBind() at hoge.hogehoge.Button1_ServerClick(Object sender, EventArgs e) at System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) at System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain() 続く...(本文長すぎって。。。)
682 名前:681 mailto:sage [2005/04/07(木) 17:41:27 ] ...続き System.InvalidOperationException: データ リーダーが閉じているときに、無効な操作 Read をしようとしました。 at System.Data.SqlClient.SqlDataReader.Read() at System.Data.Common.DbEnumerator.MoveNext() at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.Repeater.DataBind() at hoge.hogehoge.Button1_ServerClick(Object sender, EventArgs e) at System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) at System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain() 以下、ソース抜粋 Repeater1.DataSource = SqlDataReader1 Repeater1.DataBind() ★ ここで稀にエラーが発生 SqlDataReader1.Close() SqlConnection1.Close() SqlConnection1 = Nothing データベースを検索して結果を表示する、といった簡単なものなのですが、 結果の件数が100件程度だと再現せず、1000件ほどになると稀に発生します。 よい解決案などありましたら、ご教授おねがいいたします。
683 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 18:24:18 ] >>681 Repeater1が何ものか知らないが DataSourceにReaderをつっこむのではなく DataTableのDefaultViewを設定してみては?
684 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 18:31:49 ] .netフレームワークのバージョンって どうやって調べるの?
685 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 18:48:52 ] >>676 _FStreamのファイナライザが既に動いてCloseしてるからだろう。 ttp://www.ascii.co.jp/pb/msdn/article/a09_0003.html が参考になるかも知れない。 そもそも、どうせFileStreamがGCされた時にFileStreamのファイナライザが動いてフラッシュして閉じるので、 こちらでわざわざファイナライザを実装してCloseさせちゃいけない。 StreamWriterを使うと、デフォルトではStreamWriterがバッファリングしてストリームにすぐには書き込まないので、 書き込み内容が損失するわけだ。StreamWriterのファイナライザはストリームに操作しないから。 確実にはStreamWriter.Closeが喚ばれない場合の解決策としては、 StreamWriterを使わずWriteやWriteLineメソッドを自前で実装してFileStreamに直接書き込むとか、 StreamWriterを使うなら、AutoFlushをTrueにする手もある。 こういう場合はIDisposableを実装させてDisposeメソッドにファイル閉じる動作を書いて、 プログラマにDispose呼出を明示するのがベターなんだけどな。 VB2005でUsingステートメントもサポートされるようになるし。 ちなみに、StreamWriter.Closeは、自動でFlush動作もするので_WriteText.Flushは必要ないし、 基底のストリームも閉じてしまうのでその後の_FStream.Flushとかできない(意味無い)。
686 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 19:01:57 ] >>684 コード上から(実行時に)調べる、というのなら ttp://www.atmarkit.co.jp/fdotnet/dotnettips/278clrversion/clrversion.html
687 名前:676 mailto:sage [2005/04/07(木) 21:05:29 ] >>685 レスありがとうございます。凄く×∞参考になりました。m(_ _)m ついでに、自分のバカさ加減がよ〜くわかりました… 全て685さんの指摘どおりです。 私はVB.NET歴2日の上、JavaやC++(こっちは4年くらいやってる)と同じ 程度の処理が出来ると思ってました(爆)。 StreamWriter.CloseがFileStream.Closeを呼び出すのはいいとして、 Finalize()の呼び出し順序が明確に決まってない事には驚きました。 指摘にあったDisposeの実装で対応するしかなさそうです。 Finalize()を使った「後始末はおまえにまかせる」は無理っぽいですね。 書き込みの精度は、一定のWriteをした直後にFlushするようにします。 StreamWriterとFileStreamの問題は有名なんですね。 しかもStreamWriterのFinalize()が何もしないっては……orz
688 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 01:06:57 ] 何かしてくれるとバグに気づきにくい可能性があるからだよ。
689 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 03:00:17 ] >>679 あなたはVBスレでVB万歳なレスだけみていてそれで満足なんですね? たまには自己否定も必要なんですよ。
690 名前:デフォルトの名無しさん [2005/04/08(金) 05:20:35 ] VB6からの移行組です。 簡単な通信(チャット)を行うプログラムを作ろうと思います。 Winsockコントロールが標準で無いのでSystem.Net.Socketsを 使う方法を初歩から学習中です。 そこで分からないのは、Winsock.ocxのデータ受信イベント (DataArrival)の代わりの方法についてです。 WithEvents 付きで System.Net.Sockets.TcpClient を宣言すると 「WithEvents変数はイベントを発生させません」と怒られます。 何か、Eventドリブン式で書く方法は有りますでしょうか? とりあえず、Threadクラスを使ってループ待ちさせる方法を見つけ 自作イベントのような形では実現できましたが、こっちのスレッド 方式と、Event方式とどちらが一般的でしょうか? VB6の時にクラスは使ってましたが理解度は低めです。 よろしくお願いいたします。
691 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 05:33:58 ] わざわざイベントで書く必要がないんだが。 送受信を行うNetworkStreamは、データが来るまで自動的にブロッキングしてプログラムの流れを中断させる。 別スレッドでReadさせておけばいい。
692 名前:デフォルトの名無しさん [2005/04/08(金) 06:04:23 ] >691 レスありがとうございます!それでは現在テストで動いた以下の スレッド方式でも、悪い方ではないと考えていいでしょうか? Private Sock1 As New System.Net.Sockets.TcpClient Private Stream As NetworkStream Private myThread As Threading.Thread -----ボタンクリック Private Sub Button1_Click(〜) Handles Button1.Click Sock1.Connect("www.yahoo.co.jp", 80) TextBox1.Text = "" Stream = Sock1.GetStream() Dim ByteSend As Byte() = System.Text.Encoding.ASCII.GetBytes("GET / HTTP/1.0" + vbCrLf + vbCrLf) Stream.Write(ByteSend, 0, ByteSend.Length()) myThread = New Threading.Thread(AddressOf DataArrave) myThread.Start() End Sub -----自作SUB Private Sub DataArrave() Dim ByteRead(2000) As Byte Dim strText As String Dim intLength As Integer Dim lngRevcnt As Long Dim lngRevByt As Long Do intLength = Stream.Read(ByteRead, 0, ByteRead.Length()) lngRevcnt += 1 : lngRevByt += CLng(intLength) Me.Text = "受信パケット数:" & lngRevcnt & " (" & lngRevByt & " byte)" strText += System.Text.Encoding.ASCII.GetString(ByteRead, 0, intLength) If intLength < 1 Then Exit Do Sock1.Close() Loop TextBox1.Text = strText End Sub
693 名前:690=692 [2005/04/08(金) 06:08:49 ] ↑すみません、レスの改行制限で見づらくなりました。 とりあえずの確認用なので、単に、HTTP-GETを送信して 自作スレッドで受信させているだけのショボプログラムです。 とりあえずこんな感じでも、アリでしょうか?
694 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 06:21:05 ] >>692 Readがパケットごとに実行される保証はどこにもないはずだがね。 > strText += System.Text.Encoding.ASCII.GetString(ByteRead, 0, intLength) まあASCIIだからいいけど、shift_jisとかだとデコードに失敗する可能性があるよ。 最後の1バイトが2バイト文字の1バイト目だった場合に。 受信中はMemoryStreamに蓄えて、受信が完了してから一気にGetStringしたほうがいい。 > Do (略) > If intLength < 1 Then Exit Do > Sock1.Close() > Loop このSock1.Close()はコピペミスかな? Loopの外に出さなきゃいけないね。 > Me.Text = "受信パケット数:" & lngRevcnt & " (" & lngRevByt & " byte)" > TextBox1.Text = strText やっかいなのはこいつだ。 別スレッドからコントロールを操作しちゃいけない。 Invoke/BeginInvokeを使う必要がある。 ttp://dobon.net/vb/melma/index.html の19から26、とくに25を良く読んでマルチスレッドに関する問題を良く把握してくれ。
695 名前:690=692 [2005/04/08(金) 06:33:44 ] >694 うぉ!ありがとうございます! 1Read=1パケとは限らないのですね。分かりました! 確かに、逐次デコードはまずいですね。了解です。 > このSock1.Close()はコピペミスかな? > Loopの外に出さなきゃいけないね。 そうなんです。実は少し悩んでました。 手持ちの書籍「VB..net逆引き大全500」の初歩サンプルに こういった記述があったもんで丸写ししながら疑問に感じてました。 試してみたらコレでも動くんです。 今試したら外へ出しても動きますね。理屈通り外へ出します! > Invoke/BeginInvokeを使う必要がある。 了解です。教えていただいた所を良く読んで勉強します! とても丁寧に分かり易いレスを本当にありがとうございました!
696 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 07:12:06 ] >>689 理由が書かれていませんね。
697 名前:デフォルトの名無しさん mailto:sage [2005/04/08(金) 08:29:05 ] >>686 遅くなりましたがありがとうございました。
698 名前:デフォルトの名無しさん [2005/04/08(金) 13:11:00 ] comboboxでデータソース指定だと、表示(DisplayMember)と値(ValueMember)を指定できるけど、 自分で項目を設定した場合は、そういった指定はできないものなのですか?