1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ] 前スレ VB.NET質問スレ(Part29) pc12.2ch.net/test/read.cgi/tech/1235206416/l50 テンプレは>>2 〜
403 名前:401 mailto:sage [2009/07/09(木) 00:25:50 ] 実験その2 Public Class Main Public MyForm1 as new Form1 Public Sub Main() Application.Run(MyForm1) End Sub End Class Public Class Form2 Public MyForm1_2 as new Form1 Private Sub Button1_Click(略 MyForm1_2.Show Form1.SetTextBox("test") End Sub End Class Form1は例によって一緒。 結果は、MyForm1のフォームに書き込みされました。 MyForm1とMyForm1_2という二つのForm1がインスタンス化されていて、 Form1という名前ではどちらか判断できないのですが、結果はそういうことで。 最初インスタンス化したClassの別名になっている? 実際の内部挙動はわかりません。 これもイケてないなぁ。 以上、長文スマソ
404 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:01:51 ] ↑ 横槍を入れることで疑問を解消させてもらう新しい形で 質問させて頂きます。 2つめの実験(>>402 )で、 どうして書き込みされたフォームが見えないのかわかりません。 MyForm2 というのは、MyForm1_2 のことですよね? 3つめの実験(>>403 )は、 結局、MyForm1にはアクセスしていない、ということではないですか? Formというクラスは、インスタンスを作らなくてもアクセスできる Shared(静的)な要素を持っているのでしょうか。 (>>399 )さんが言っていることは、 デザイナで作成するForm1には、自分自身のインスタンスをあらわす「Form1」という 要素がSharedか何かで自動的に定義される、ということなのでしょうか。
405 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 02:52:21 ] >>400 既定のインスタンスってのは、VB6にはあった .NETになっていったん廃止されて2005で復活らしい >>401 >VB2005で実験してみたところ、普通に書き込みされました 手元に2005ないんで試せないが、そうだとすると、2005と2008で動作が違うといことに 実験の内容から考察するに、2005でフォームをnewすると、 1個目のインスタンスは既定のインスタンス戻してるっぽいな 2008なら1回目のnewから既定のインスタンスと別のインスタンス作ってるっぽい >>404 二つ目の実験でMyForm1_2は、Form2の中でnewされた(Form1の)インスタンス Application.Runされている(=表示されている)のはMainでnewされた(Form1の)インスタンス これは明らかに別物だから>401が言うとおりまあ普通 三つ目の実験だが、 Form1.SetTextBox("test") でForm1って変数はないから、 これは既定のインスタンスに書き込みにいってる MyForm1が書き込まれたってことは、MyForm1のnewで既定のインスタンス取得してると思われ 2008で実験その3やると、どっちのフォームにも書きこまれない これはMyForm1もMyForm1_2も既定のインスタンスとは別のインスタンスだってことだと
406 名前:404 mailto:sage [2009/07/09(木) 05:13:06 ] なるほど、既定のインスタンスがどういうものなのか、よくわかった。 で、2005ではMain クラスの Main メソッドで new されて、かつ Application.Run で使用されたフォームは、 そのフォームクラスの既定のインスタンスになるのか。 つまりこれは既定のインスタンスになるための十分条件なわけだけど、 最低限必要な条件って、上記のうちどれだろ。。。 ま、とりあえず横槍質問はこのくらいにしときます。
407 名前:396 mailto:sage [2009/07/09(木) 09:23:18 ] >>398-406 レスありがとうございます。 >>399 詳しい説明をありがとうございます。 Application.Run(Form1) で期待通りの動作が出来ました。 >>401 実験をありがとうございます。 VB2005 と VB2008 で動作が異なっている事が分りました。
408 名前:デフォルトの名無しさん [2009/07/09(木) 09:34:02 ] VB.NETはBasicの後継言語と聞いたので質問なのだが、 N88Basic にあった、Play 文はどこにいったんですか? 昔、Play文で作曲しまくっていたので、 VB.NETでもどうしてもPlay文を使いたいのです。 どうか、お願いします。
409 名前:デフォルトの名無しさん [2009/07/09(木) 09:41:35 ] 後継言語ではありません 全くの別物です だいたい、そういう組み込みの「〜文」などというのはVB.NETにはほとんど存在しません .NETのライブラリにも無いのでWin32API使いましょう
410 名前:390 mailto:sage [2009/07/09(木) 09:52:38 ] >>394 ON/OFFを切り替える度にPCの再起動が必要になります。 これは実運用上、非現実的です。 >>395 プロセスが利用しているDLLを表示するためのコマンドラインツールですよね? ちょっと目的とは異なるかと思うんです... >>397 COM経由で開いているファイルの一覧を取得することができるんですか!? ちょっと調べてみます。 環境的にはスタンドアロンの場合が多いです。 私が開発しているアプリから xls 形式でエクスポート上書き保存できない場合、 スタンドアロン環境でかつ Excel は起動していない時、ユーザは「なんで?」と なってしまうんです。他アプリが該当の xls ファイルを掴んでいるケースが あったりするので、ユーザに「xxx.exe でその xls が開かれていますよ。」と 通知したいんです。
411 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:18:53 ] >>406 なんかちょっと勘違いしてるっぽいが フォームの「既定のインスタンス」ってのは、そのインスタンスを保持する変数がなくても 明示的に(newで)作成しなくても存在する特殊なインスタンスのこと 普通のオブジェクトだと、保持する変数がないインスタンスはGCで回収される 明示的にnewされた普通のインスタンスが「規定」になるわけではないよ
412 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:02:40 ] >>397 取得できるのは自プロセスが開いた一覧だね
413 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:31:24 ] >>410 technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx こいつでファイル指定して開いてるプロセス検索できる こいつがどうやってるかわからんが、同じことやれば可能なはずだ
414 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:47:11 ] >>413 openfiles.exeと同じことだろ >>410 ttp://oshiete1.goo.ne.jp/qa1652898.html
415 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 16:13:00 ] >>414 Process Explorerは、openfiles.exeみたいに(設定変えて)再起動しなくても使えるみたいだが?
416 名前:390 mailto:sage [2009/07/09(木) 17:09:04 ] >>412-415 レスありがとうございます。 >>413 のご指摘のようなことを自前で実装したいのですが仕組みがわからないです。 せめて Process Explorer にファイル名をパラメータで渡して結果を受け取る、みたいな ことができれば嬉しいんですが。 エンドユーザはコンピュータに不慣れな人が多いので、なるべく必要な機能を自前で 実装してあげたいのです。 というか、このような機能の需要て少ないんでしょうかね。 .NetFramework4.0あたりで機能を実装してくれたら...ないか。 ひとまず>>414 氏が提示してくれたリンクを見ながら闘ってみます。
417 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:35:11 ] Dim StartQuery As New EventQuery( _ "SELECT * FROM" & _ " __InstanceCreationEvent WITHIN 1 " & _ "WHERE TargetInstance isa ""Win32_Process""") StartWatcher = New ManagementEventWatcher(StartQuery) AddHandler StartWatcher.EventArrived, AddressOf Me.ProcessArrived Private Sub ProcessArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs) msgbox("Arrived") Me.RefreshList() End Sub プロセスの一覧を表示していて新規で何かが起動したら更新するというようにやってるんだけど "Arrived"メッセージは出るけどRefreshListが呼ばれない 特にエラーも何も出ない たぶんMeの参照先が違ってるんだろうけどこれはどうすればいいの?
418 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:44:12 ] RefreshListが呼ばれないとどうやって判断したのさ 取り敢えずMsgBoxはDebug.Print辺りに置き換えてステップ実行 多分別スレッドでイベントハンドラが呼び出されてるから
419 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:47:28 ] >>418 RefreshListの中にmsgboxとconsole.write両方を入れてみたけど反応なし エラーも何も出ない 別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw
420 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:52:29 ] だからまずステップ実行して確認しろよ
421 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:52:53 ] そこまでわかってるなら MeにContol.Invoke使ってUIスレッドでRefreshList()呼べばいいじゃん
422 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 20:00:51 ] >>421 そういうものがあるのを今見つけて試してる
423 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 20:06:48 ] 出来たw
424 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 21:47:25 ] >別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw 聞いてないだろどう見ても、あほかよ
425 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 22:58:43 ] >>424 Meの参照先が違うって書いてるのにそれが読み取れないってどんだけ素人だよw あーちなみにVB.Netまだ1週間目w
426 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:07:07 ] 別スレッドで参照先が異なるとかどこの世界のスレッドだよ
427 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:37:15 ] ちょっとVB.Netしろうとの俺に教えてくれ Meの参照先ってインスタンスだよな インスタンスとスレッドって同じなのか?
428 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:41:21 ] 何を言っているのか分からないぐらい全然違うもの
429 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:45:15 ] >>427 >インスタンスとスレッドって同じなのか? 違うよ
430 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 00:18:44 ] IEのアドレスバーの左側のeのurlのアイコンを コントロールへD&DしてURLを取得する方法について >>216 で教えて頂いたのですが このアイコンをアプリケーションのexeファイルのアイコンにドロップして アプリケーションを起動した場合に、urlを取得する方法を教えて頂きたいです。 ファイルやフォルダのドロップの情報の取得は cmds = System.Environment.GetCommandLineArgs で確認できたのですが、urlのアイコンの場合は この中には入らないようです。
431 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 00:27:48 ] そもそもドロップでexe実行できたっけ?
432 名前:デフォルトの名無しさん [2009/07/10(金) 01:52:37 ] >>427 ・インスタンスとは・・・ 例えば、クラスを自分で定義する場合、 public class MyClass 〜 end class と記述する。で、このクラスを form1 内で使う場合、例えば次のように記述する。 dim mc1 as new MyClass dim mc2 as MyClass mc2 = new MyClass これで、mc1、mc2 というのが、クラス名「MyClass」のインスタンスということになる。 new +「クラス名」で、そのクラスのインスタンスを作ることができる、というわけ。 インスタンスというのは、変数やクラスを代入するための入れ物、と思っておけばよいはず。 as の後ろにくる MyClass とか integer とかは、別箇所で定義されているクラス名(型名)でしかない。 実際に値を代入してプログラム内で参照するのは、そのインスタンスである。 だから、一つのクラスにいろいろな値をセットしたものを別々に保持できる。(mc1 と mc2 のように) ・スレッドとは・・・ プログラムの実行単位?とでもいったらいいのかな。 スレッド内のプログラムは、上から下に順番に実行される。 条件分岐やループで実行順が前後することはあっても、 一つの行を実行し終わるまで、次の行は実行されない。 スレッドを意識したプログラミングをしていなければ、通常は そういた状態になっている。(シングルスレッド) スレッドを二つ作れば、それぞれのスレッドでプログラムが上から下に順番に実行され、 ユーザーから見ると、同時に二つの行を実行しているように見える。 ファイルを読み込むとか、TCP/IP通信をするなど、時間のかかる処理を実行する場合に、 あらかじめその処理部分だけを別スレッドとして記述し、必要時にそのスレッドをスタートさせることによって、 時間のかかる処理を実行しながら、他の処理も同時に処理できるようになる。(マルチスレッド)
433 名前:427 mailto:sage [2009/07/10(金) 05:13:03 ] Meが参照するのはインスタンスでいいんだよな? >たぶんMeの参照先が違ってるんだろうけど これはつまり、別インスタンスを参照してるってことだよな んでこれから >別スレッドで呼び出されてるのは分かってる になるのはなんでかわからんのだが スレッドが違えばインスタンスは別のものなのか? インスタンスはスレッドごとに生成されるの?
434 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 06:42:26 ] インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら スレッドはプロセスが異なるので別のインスタンスになる 通常のWindows概念でのインスタンスでいいのなら VBのフォームはすべて同じインスタンス スレッドは別 DLLも別 インスタンスが違うと何が起こるかというとスタックメモリが別になる つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない
435 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 08:17:13 ] その説明は紛らわしすぎる。.NET殆ど関係ないし。 >>433 Meが参照するのはインスタンスでOK。 そして通常、インスタンスはプロセス単位で生成されることになる。 まあ、.NETのアプリケーションドメインを利用すれば、 単一プロセス内に完全に分離した環境を複数作ったりもできるのだけど、 普通は関係ないな。
436 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 09:30:33 ] >>434 >インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら お前の「普通」が判らん。 VBに限らず一般にOOPLで「インスタンス」といえば、プロセス上のメモリに 割り当てられた、オブジェクトの実体。 >スレッドはプロセスが異なるので別のインスタンスになる もう喋るなw
437 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:37:41 ] VB2005 環境 XPPro、C2D E8400、3GBRAM、HDD80GB フォーム50個位あるプロジェクトいじってるんだけど 起動とかいろいろ遅い(起動30秒くらい、MSDNも起動20秒くらい、全般的にもっさり) ストレージがネックだと思うんですが、 大容量のHDDよりかSSDにしたほうがいいですかね? SSDで開発してる方、体感的に速くなりましたか?
438 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:26:47 ] >ストレージがネックだと思うんですが、 俺には >フォーム50個位ある これを最初に一気に作ってるからだと思えるんだが。
439 名前:438 mailto:sage [2009/07/10(金) 11:28:14 ] …いや、勘違い。IDEの起動が遅いっつってんのか。
440 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:37:41 ] CドライブにSSD使ってるけど取り敢えず我慢できないほどの遅さはないなぁ 初めからSSD入れてるからHDDとのまともな比較はできないけど DocumentExplorerでSystem.Windows.Forms.RichTextBoxのメンバ一覧開くのに3秒弱ぐらい これは単に飼い慣らされてるだけか
441 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:56:09 ] HDDも壊れる時は2〜3年くらいで壊れちゃうけど 開発でSSDは、ちょっと怖くない?
442 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 13:25:44 ] >>437 デザイン画面を開きまくってないよな? 開発用にわざわざSSDで入れ直すなら RAMディスクの方が簡単でよくね?
443 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 13:54:33 ] >>441 一応SLCにしてる メモリも無駄に積んでるからスワップもまずしないはず プロジェクト自体はHDDにおいてるし 投資ほどの効果があったかというと首をひねらざるを得ないのは事実 まあPCに金使うのも趣味の一環だから良いけどさ
444 名前:427 mailto:sage [2009/07/10(金) 14:00:25 ] Windowsでvb.netでの一般的な話でいいんだけど プロセスてのはほぼプログラムのEXE単位だよな んでスレッドってのは実際にCPUが仕事する単位で、 プロセスが一つ以上のスレッドをもって管理しながらプログラムを実行してる インスタンスは、プロセス単位で生成(管理)される ここまでOK? >>434 2行目以降がまったく理解できん >スレッドはプロセスが異なるので別のインスタンスになる スレッドは...インスタンスになる? スレッドはプロセスが異なる...? >VBのフォームはすべて同じインスタンス たとえばフォームを何回かnewしても、それはすべて同じインスタンス? >スレッドは別 何と別? >DLLも別 何と、何が別?元のexeとスレッドが別ってこと? >つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない これは、自分と同じクラスの異なるインスタンス間では、って話? グローバルってのはそのクラスでpublic定義だってこと? それともそのクラスからみて上位のレベルで定義されてるってこと?
445 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 14:06:41 ] 434はスルーして良し
446 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 14:08:38 ] >>442 > デザイン画面を開きまくってないよな? 10個位開いてたので1個にしてみると80%くらいの時間になりました。 気づくと色々開いちゃってるのでこまめに閉じるようにしたほうがいいですね。 > 開発用にわざわざSSDで入れ直すなら > RAMディスクの方が簡単でよくね? Excelを大量に読み書きする処理作っててRAMディスクは使ってるんですが プロジェクト一式RAMに置いてもそう変わらなかったです。 開発環境自体も置くのはちょっと容量が厳しそう。 ありがとうございます。 お手軽に劇的な改善は難しそうな感じですかね。 VB6メインでやってて最近復帰したんですが、 その頃に比べてPCの性能は飛躍的に向上してるはずですが、 なかなか難しい物ですね。
447 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 14:32:09 ] どう考えても2010のインテリセンスは重すぎだと思う。
448 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 15:30:21 ] >>436 だたの先頭アドレスを実態と呼ぼうがIDと呼ぼうが個人の自由だが
449 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 15:32:55 ] Newするとき、しないときの見極めは 覚えるしかないのでしょうか?
450 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 15:39:14 ] マルチプロセス 複数の「プログラム」が別々のオブジェクトを参照しながら動いてる。 自分と隣の部屋のやつが、たまたま同時にスパゲティ食ってる状態。どんな食い方しても喧嘩にならない。 マルチスレッド 複数の「プログラム」が同一のオブジェクトを参照しながら動いてる。 自分ちで、兄弟どうしが一緒にスパゲティ食ってるようなもの。スパゲティの取り合いで喧嘩になる。
451 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:05:19 ] >>448 そうだな。便所の壁にでも書いとけ。
452 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:20:06 ] >>449 それって>>407 の話?
453 名前:デフォルトの名無しさん [2009/07/10(金) 17:20:57 ] 参照型のメンバを含む構造体を定義しています。 その構造体型の変数間で代入を実行しても 当然のことながら参照型のメンバはコピーされません。 C++ならば代入演算子をオーバロードすればよいのですが、 VB2008ではできません。 参照型のメンバもコピーされるようにするにはどうしたらよいでしょうか? よろしくお願いいたします。
454 名前:449 mailto:sage [2009/07/10(金) 17:24:23 ] >>452 違います。 StringやInteger は、Newをしないで使えますよね? Mathクラスは、New自体が出来ないので、 その見極めは覚えるしかないのかなと思ったので。
455 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 17:30:45 ] >>453 構造体はCのとは性質も使いどころも違うから気をつけてな。 そういうものは通常は参照型で作ってICloneable.Clone。
456 名前:453 [2009/07/10(金) 17:40:31 ] >>455 早速ありがとうございました。 ICloneable.Cloneは来週にでもちょっと調べてみます。
457 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 19:42:07 ] VB2005 デザイナでは見えないのに、 プロパティウインドウのドロップダウンに出てくる コントロールを選んで削除したいのですが、 LocationやSizeをいじっても出てきません。 どのようにすればいいでしょうか。
458 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 19:45:02 ] 直接書き換えれば良いじゃない。 どうせただのテキストなんだし。
459 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:08:18 ] >>454 ・Integer は値型なので New 不要。 ・String は参照型だけど他とちょっと違ってて、 文字列を代入することでコンストラクタが呼ばれるので その場合は New 不要。 ・Math に限らず、「共有メソッド」を呼び出すときは New 不要。
460 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:10:35 ] >>457 「ドキュメント アウトライン」 (表示メニューの その他のウィンドウにある) を出しといて フォームのデザイナを開くと、コントロールやら コンポーネントが表示されるので、そこで選択して削除。
461 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:21:45 ] ありがとうございます。 >>458 Designer.vb書き換えですか。 数が20個ぐらいあるので出来ればもっとスマートな方法があればと思ったんですが…。 >>460 なぜかそれでも出てこないんです。 他のコントロールはいくつかのPanelにすべて乗せているのですが それをすべて削除してドキュメントアウトライン上はFormしかない状態でも プロパティウインドウのドロップダウンには相変わらず出てきてしまいます。 とりあえず必要なコントロール(が乗っているPanel)をごっそり別の空Formに移して コードも丸ごとコピペという無理やりな方法で対処しました。
462 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 23:12:40 ] 質問です。 Manu.exe Sub.exe の2つのプログラムがあるとします。 Manu.exeからProcess.StartでSub.exeを起動しているプログラムがあるのですが、 SubをDll化してManuから参照し、呼び出すのに比べて負荷は大きいでしょうか? Subは必ずManuから呼ばれるのでSubをDll化してManuから普通に参照するように変えたいのですが 作った人が問題がなければ変えたくないと言っているので変える理由がほしいのです。 よろしくお願いします。
463 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 23:35:49 ] そりゃプロセス作るのは一仕事だけどな 何で変える理由がないのに変えたいんだよ
464 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 23:58:40 ] 別のexeだろうと、Publicで公開されているアセンブリにはアクセス可能。 exeなんて単なるブートストラップです。偉い人には(ry
465 名前:デフォルトの名無しさん [2009/07/11(土) 00:31:55 ] 入出力の受け渡しに一時ファイルを使ってるなら、 相手を直接呼ぶのに較べてものすごーく非効率
466 名前:462 mailto:sage [2009/07/11(土) 02:05:06 ] 2つのプログラムを例にあげましたが、 Sub.exe的なプログラムがこれから50個くらいできる予定でいます。 1exe=1ソリューションです。 >> 463 >プロセス作るのは一仕事 やっぱり負荷はかかるのですね。 管理がめんどそうなので変更したいと言ったのですが 却下されました。なので変更するための新たな 別の理由がほしかったのです。 >> 464 今のつくりだとMainのところにもフォームを呼び出す前に ごにょごにょ書いてあるのですが、MainもProcess.Start を使わずに呼べますか?
467 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 02:20:53 ] フォーム1個だけのソリューションを50個作って、全部exeにする?? ・・ありえんわ 何でそんな腐った設計にしたんだ・・・。
468 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 02:30:11 ] fork至上主義な人なんだろうか…… で、.NETで同じようなやり方がわからないから個別のアプリにしたとか。
469 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 02:37:36 ] そもそもプロセス分けたら普通に不便だろ。 データのやり取りとか何もないわけ?
470 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 02:39:56 ] >>467 え?普通そうしないの? 1ソリューションに全部入れちゃうの?
471 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 03:15:14 ] >>470 そりゃ必要に応じてプロジェクト分けるし、ある程度独立してたり他で使うやつとかはソリューションも分けるけど Form毎にソリューション作ったり、全部一緒にしちゃう(小規模なのは例外)なんて事は普通やらんだろ。 Form毎にソリューション分けてexeにして、Process.Startしてるやつなんて見た事がない。
472 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 03:18:00 ] >>466 その50個のフォームで一つの業務アプリになるのか? もしそうなら、一つのEXEでいいと思うがな アプリ配布に50個のexe配布とか、exeファイルのバージョン管理50個とかやっとれん >>470 もし50個のexe作るとしても、50個のプロジェクトは作るが、 ソリューションは一つで済ますのが普通じゃないかと思うのだが
473 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 09:01:26 ] VB6の頃は酔う言う作り方もしたな。.NET以降では意味がない。
474 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 09:05:51 ] >酔う言う *そういう 共通部分のモジュールをソース単位で共有してたり
475 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:49:13 ] >>470 アセンブリは分割しても、特に理由がない限り プロセスを複数にしないのが普通だと思うが。
476 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 03:59:45 ] Formを閉じるとき Me.close のみで Me.dispose をしなかった場合、どのような問題が発生しますか?
477 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 04:27:31 ] ガベコレが起きるまでリソースが解放されない。 まあほっといても、いつかはガベコレがリソースを解放してくれるわけですがね。 普通、Formが抱えてるリソースなんて、そんな多くないと思うし。 背景画像とか?
478 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 04:36:31 ] ダイアログフォームと非表示のMDI子フォームでない普通のモーダレスフォームなら、 CloseでDisposeされる。 この辺の動作はややこしいんでMSDNをよく見たほうがいい。
479 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 16:45:20 ] >>472 フォーム毎にexeを分けることで、業務が稼動中でもアプリを終了させずに アップデートや不具合対応が出来るからとかなんとかで、そんな話もありました。
480 名前:デフォルトの名無しさん [2009/07/12(日) 18:05:45 ] それなら共通部分をDLLに括りだすこともソース単位で共有することもできないよね? コピペコードだらけになるんだろうな
481 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:37:02 ] 今までVB6を使っていて、Visual Studio 2008に最近切り替えたのですが、 WinSockが見当たらなくなりました。 ひょっとして何か別のコントロールに変わってしまったのですか?
482 名前:デフォルトの名無しさん [2009/07/12(日) 18:41:09 ] コントロールなんかない System.NET名前空間やSystem.NET.Sockets名前空間にあるクラスを使う
483 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 19:08:32 ] >>480 リンクとして参照すれば共有できるよ。
484 名前:デフォルトの名無しさん [2009/07/12(日) 19:16:37 ] それで>>429 に対応しようとするとバージョン管理が大変すぎるだろ
485 名前:484 mailto:sage [2009/07/12(日) 19:22:33 ] >>479 の間違い
486 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 19:27:41 ] >>482 レスありがとうございます。 System.NET名前空間やSystem.NET.Sockets名前空間について調べてみましたが、 具体的な使い方がよくわかりませんでした。 プロジェクト→クラスでの追加したうえで、Socketを利用する、ということですか?
487 名前:デフォルトの名無しさん [2009/07/12(日) 19:32:48 ] 必要なクラスのインスタンスを作って使う これだけでわからなないなら、オブジェクト指向を勉強しろとしか言いようがない
488 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:48:15 ] DBの接続先をウィザードを使って設定したのですが、 なんらかの不具合が発生してDBに接続が出来なかった場合に エラーを返すような処理を作りたいです。 例えばDBに接続するところにtyr〜catch文を入れようと思うんですが、 自動で作られている部分の為、どこにあるかわかりませんでした。 どのあたりで、DBに接続している処理が記述されているのでしょうか?
489 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 00:01:58 ] >>488 メニューの[デバッグ]-[ステップ イン]で見ていけばわかるんじゃね
490 名前:488 mailto:sage [2009/07/13(月) 00:16:19 ] >>489 ちょっと試してみます。 ちなみに自動で作られた処理の部分を書き換えるのって 問題ないですよね?
491 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 00:39:31 ] 文字列の中から特定の文字列がいくつあるか数える関数を教えて
492 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 02:17:12 ] >>491 正規表現で探し出して、カウントする変数をインクリメントすりゃいい
493 名前:デフォルトの名無しさん [2009/07/13(月) 07:52:53 BE:1857300285-2BP(0)] VB初心者です。 VisualStudio2005 VBにて開発を行っています。 先輩のソースに似せようとしているのですが、 処理の起動方法がわからなくて困ってます。 フォームありのソリューションにて、下記のフォーム起動方法を Public Class Program <STAThread()> _ Shared Sub Main(ByVal CmdArgs() As String) ・・・・ Application.Run(New ClassName(param)) ・・・・ end sub end class Public Class ClassName Public Sub New(ByVal param As string) 処理 End Sub End Class consoleのソリューションにて、 Application.Runに替わる関数を見つけられません。 同じように実行するにはどうしたらいいのでしょうか?
494 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 10:11:09 ] >>493 Application.Run() は MSDN にも 「アプリケーション メッセージ ループの実行を開始する」 と書かれているように、イベント・ドリブンなアプリケーションのときに使うもの。 コンソールアプリなら、その Main の中に必要な処理を書けばよい。
495 名前:デフォルトの名無しさん [2009/07/13(月) 10:38:03 ] 現在、.NETアプリケーションでWebBrowserコントロールにおいて フォルダのExplorer表示を出しています。そうすると必ずあの青色の 「タスクメニュー」が現れてきます。これを消す方法を探しています。 C#, C♯, C#相談室 Part53 pc12.2ch.net/test/read.cgi/tech/1245150671/199 にて質問してはおりましたものの回答得られませんでした。もし方法ご存知 の方おられましたら、ご指導のほど何卒よろしくお願いします。
496 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 11:01:21 ] >>480 DLLは使わずに、共通部分のソースファイルを共有してた。 それを修正するとかは出来ない決まりになってた。 >>484 バージョン管理は大変だったと思う。 担当したのが一部のフォーム(exe)だったから 出来上がったら渡すだけだったしね。
497 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 11:12:53 ] VB6の頃そのままのやり方を続けてることがあるよね。 システムハンガリアンを使わされるのはつらいよぉ。
498 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 21:10:40 ] >>495 知らんけど、BHO とか使わないと無理じゃね?
499 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 21:26:54 ] ハンガリアンってコントロール名に使ってもよろしくないの? btnとかtxtとかlblとか 未だに使ってるんだけれども… ダメなら初心者の内に勉強しなおしたい
500 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 21:29:32 ] 別にOK
501 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 03:34:45 ] btnやtxtはアプリケーション的に意味があるからOK。 最近だと入力支援があるうえ画面も広いからbuttonHoge, fugaTextと コントロール名をそのままくっつけることも多い。 無意味なのはクラスのインスタンスにclsHoge, objFugaと名前をつけることだな。
502 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 09:23:22 ] まあ実際は仕事だと変な規則のまま 伝統みたいになってるところが多いよなあ
503 名前:453 [2009/07/14(火) 17:07:24 ] 遅くなりましたが、ICloneable.Clone で試作してみました。 ディープコピーするには、 a = b.CloneCopy() みたいに、クローンを作成して代入しかないんですね。 結局、ディープコピーの方法を用意してあげても a = b が、禁止できない以上、バグの温床になりそうです。 なぜ、VBは代入演算子のオーバロードができないんだ。使えない。