VB.NET質問スレ(Part30) ..
[2ch|▼Menu]
418:デフォルトの名無しさん
09/07/09 19:44:12
RefreshListが呼ばれないとどうやって判断したのさ
取り敢えずMsgBoxはDebug.Print辺りに置き換えてステップ実行
多分別スレッドでイベントハンドラが呼び出されてるから

419:デフォルトの名無しさん
09/07/09 19:47:28
>>418
RefreshListの中にmsgboxとconsole.write両方を入れてみたけど反応なし
エラーも何も出ない
別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw

420:デフォルトの名無しさん
09/07/09 19:52:29
だからまずステップ実行して確認しろよ

421:デフォルトの名無しさん
09/07/09 19:52:53
そこまでわかってるなら
MeにContol.Invoke使ってUIスレッドでRefreshList()呼べばいいじゃん

422:デフォルトの名無しさん
09/07/09 20:00:51
>>421
そういうものがあるのを今見つけて試してる

423:デフォルトの名無しさん
09/07/09 20:06:48
出来たw

424:デフォルトの名無しさん
09/07/09 21:47:25
>別スレッドで呼び出されてるのは分かってるwその回避方法を聞いてるのw
聞いてないだろどう見ても、あほかよ


425:デフォルトの名無しさん
09/07/09 22:58:43
>>424
Meの参照先が違うって書いてるのにそれが読み取れないってどんだけ素人だよw
あーちなみにVB.Netまだ1週間目w

426:デフォルトの名無しさん
09/07/09 23:07:07
別スレッドで参照先が異なるとかどこの世界のスレッドだよ

427:デフォルトの名無しさん
09/07/09 23:37:15
ちょっとVB.Netしろうとの俺に教えてくれ
Meの参照先ってインスタンスだよな

インスタンスとスレッドって同じなのか?

428:デフォルトの名無しさん
09/07/09 23:41:21
何を言っているのか分からないぐらい全然違うもの

429:デフォルトの名無しさん
09/07/09 23:45:15
>>427
>インスタンスとスレッドって同じなのか?

違うよ

430:デフォルトの名無しさん
09/07/10 00:18:44
IEのアドレスバーの左側のeのurlのアイコンを
コントロールへD&DしてURLを取得する方法について
>>216で教えて頂いたのですが
このアイコンをアプリケーションのexeファイルのアイコンにドロップして
アプリケーションを起動した場合に、urlを取得する方法を教えて頂きたいです。

ファイルやフォルダのドロップの情報の取得は
cmds = System.Environment.GetCommandLineArgs
で確認できたのですが、urlのアイコンの場合は
この中には入らないようです。

431:デフォルトの名無しさん
09/07/10 00:27:48
そもそもドロップでexe実行できたっけ?

432:デフォルトの名無しさん
09/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
09/07/10 05:13:03
Meが参照するのはインスタンスでいいんだよな?

>たぶんMeの参照先が違ってるんだろうけど
これはつまり、別インスタンスを参照してるってことだよな
んでこれから
>別スレッドで呼び出されてるのは分かってる
になるのはなんでかわからんのだが

スレッドが違えばインスタンスは別のものなのか?
インスタンスはスレッドごとに生成されるの?

434:デフォルトの名無しさん
09/07/10 06:42:26
インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら
スレッドはプロセスが異なるので別のインスタンスになる

通常のWindows概念でのインスタンスでいいのなら
VBのフォームはすべて同じインスタンス
スレッドは別
DLLも別
インスタンスが違うと何が起こるかというとスタックメモリが別になる
つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない

435:デフォルトの名無しさん
09/07/10 08:17:13
その説明は紛らわしすぎる。.NET殆ど関係ないし。

>>433
Meが参照するのはインスタンスでOK。
そして通常、インスタンスはプロセス単位で生成されることになる。
まあ、.NETのアプリケーションドメインを利用すれば、
単一プロセス内に完全に分離した環境を複数作ったりもできるのだけど、
普通は関係ないな。

436:デフォルトの名無しさん
09/07/10 09:30:33
>>434
>インスタンスってのはプロセス固有のWindows管理IDのことだな普通なら
お前の「普通」が判らん。
VBに限らず一般にOOPLで「インスタンス」といえば、プロセス上のメモリに
割り当てられた、オブジェクトの実体。
>スレッドはプロセスが異なるので別のインスタンスになる
もう喋るなw

437:デフォルトの名無しさん
09/07/10 10:37:41
VB2005

環境
XPPro、C2D E8400、3GBRAM、HDD80GB

フォーム50個位あるプロジェクトいじってるんだけど
起動とかいろいろ遅い(起動30秒くらい、MSDNも起動20秒くらい、全般的にもっさり)
ストレージがネックだと思うんですが、
大容量のHDDよりかSSDにしたほうがいいですかね?
SSDで開発してる方、体感的に速くなりましたか?

438:デフォルトの名無しさん
09/07/10 11:26:47
>ストレージがネックだと思うんですが、
俺には
>フォーム50個位ある
これを最初に一気に作ってるからだと思えるんだが。

439:438
09/07/10 11:28:14
…いや、勘違い。IDEの起動が遅いっつってんのか。

440:デフォルトの名無しさん
09/07/10 11:37:41
CドライブにSSD使ってるけど取り敢えず我慢できないほどの遅さはないなぁ
初めからSSD入れてるからHDDとのまともな比較はできないけど

DocumentExplorerでSystem.Windows.Forms.RichTextBoxのメンバ一覧開くのに3秒弱ぐらい
これは単に飼い慣らされてるだけか

441:デフォルトの名無しさん
09/07/10 11:56:09
HDDも壊れる時は2〜3年くらいで壊れちゃうけど
開発でSSDは、ちょっと怖くない?

442:デフォルトの名無しさん
09/07/10 13:25:44
>>437
デザイン画面を開きまくってないよな?

開発用にわざわざSSDで入れ直すなら
RAMディスクの方が簡単でよくね?


443:デフォルトの名無しさん
09/07/10 13:54:33
>>441
一応SLCにしてる メモリも無駄に積んでるからスワップもまずしないはず
プロジェクト自体はHDDにおいてるし

投資ほどの効果があったかというと首をひねらざるを得ないのは事実
まあPCに金使うのも趣味の一環だから良いけどさ

444:427
09/07/10 14:00:25
Windowsでvb.netでの一般的な話でいいんだけど

プロセスてのはほぼプログラムのEXE単位だよな
んでスレッドってのは実際にCPUが仕事する単位で、
プロセスが一つ以上のスレッドをもって管理しながらプログラムを実行してる

インスタンスは、プロセス単位で生成(管理)される

ここまでOK?

>>434
2行目以降がまったく理解できん
>スレッドはプロセスが異なるので別のインスタンスになる
スレッドは...インスタンスになる?
スレッドはプロセスが異なる...?
>VBのフォームはすべて同じインスタンス
たとえばフォームを何回かnewしても、それはすべて同じインスタンス?
>スレッドは別
何と別?
>DLLも別
何と、何が別?元のexeとスレッドが別ってこと?
>つまりグローバルな変数やクラスへは感嘆には相互にアクセス出来ない
これは、自分と同じクラスの異なるインスタンス間では、って話?
グローバルってのはそのクラスでpublic定義だってこと?
それともそのクラスからみて上位のレベルで定義されてるってこと?


445:デフォルトの名無しさん
09/07/10 14:06:41
434はスルーして良し

446:デフォルトの名無しさん
09/07/10 14:08:38
>>442
> デザイン画面を開きまくってないよな?
10個位開いてたので1個にしてみると80%くらいの時間になりました。
気づくと色々開いちゃってるのでこまめに閉じるようにしたほうがいいですね。

> 開発用にわざわざSSDで入れ直すなら
> RAMディスクの方が簡単でよくね?
Excelを大量に読み書きする処理作っててRAMディスクは使ってるんですが
プロジェクト一式RAMに置いてもそう変わらなかったです。
開発環境自体も置くのはちょっと容量が厳しそう。

ありがとうございます。
お手軽に劇的な改善は難しそうな感じですかね。
VB6メインでやってて最近復帰したんですが、
その頃に比べてPCの性能は飛躍的に向上してるはずですが、
なかなか難しい物ですね。

447:デフォルトの名無しさん
09/07/10 14:32:09
どう考えても2010のインテリセンスは重すぎだと思う。

448:デフォルトの名無しさん
09/07/10 15:30:21
>>436
だたの先頭アドレスを実態と呼ぼうがIDと呼ぼうが個人の自由だが

449:デフォルトの名無しさん
09/07/10 15:32:55
Newするとき、しないときの見極めは
覚えるしかないのでしょうか?

450:デフォルトの名無しさん
09/07/10 15:39:14
マルチプロセス
  複数の「プログラム」が別々のオブジェクトを参照しながら動いてる。
  自分と隣の部屋のやつが、たまたま同時にスパゲティ食ってる状態。どんな食い方しても喧嘩にならない。

マルチスレッド
  複数の「プログラム」が同一のオブジェクトを参照しながら動いてる。
  自分ちで、兄弟どうしが一緒にスパゲティ食ってるようなもの。スパゲティの取り合いで喧嘩になる。

451:デフォルトの名無しさん
09/07/10 16:05:19
>>448
そうだな。便所の壁にでも書いとけ。

452:デフォルトの名無しさん
09/07/10 16:20:06
>>449
それって>>407の話?

453:デフォルトの名無しさん
09/07/10 17:20:57
参照型のメンバを含む構造体を定義しています。
その構造体型の変数間で代入を実行しても
当然のことながら参照型のメンバはコピーされません。
C++ならば代入演算子をオーバロードすればよいのですが、
VB2008ではできません。

参照型のメンバもコピーされるようにするにはどうしたらよいでしょうか?
よろしくお願いいたします。

454:449
09/07/10 17:24:23
>>452
違います。
StringやInteger は、Newをしないで使えますよね?
Mathクラスは、New自体が出来ないので、
その見極めは覚えるしかないのかなと思ったので。

455:デフォルトの名無しさん
09/07/10 17:30:45
>>453
構造体はCのとは性質も使いどころも違うから気をつけてな。
そういうものは通常は参照型で作ってICloneable.Clone。

456:453
09/07/10 17:40:31
>>455
早速ありがとうございました。
ICloneable.Cloneは来週にでもちょっと調べてみます。


457:デフォルトの名無しさん
09/07/10 19:42:07
VB2005

デザイナでは見えないのに、
プロパティウインドウのドロップダウンに出てくる
コントロールを選んで削除したいのですが、
LocationやSizeをいじっても出てきません。
どのようにすればいいでしょうか。

458:デフォルトの名無しさん
09/07/10 19:45:02
直接書き換えれば良いじゃない。
どうせただのテキストなんだし。

459:デフォルトの名無しさん
09/07/10 20:08:18
>>454
・Integer は値型なので New 不要。
・String は参照型だけど他とちょっと違ってて、
 文字列を代入することでコンストラクタが呼ばれるので
 その場合は New 不要。
・Math に限らず、「共有メソッド」を呼び出すときは New 不要。

460:デフォルトの名無しさん
09/07/10 20:10:35
>>457
「ドキュメント アウトライン」 (表示メニューの
その他のウィンドウにある) を出しといて
フォームのデザイナを開くと、コントロールやら
コンポーネントが表示されるので、そこで選択して削除。

461:デフォルトの名無しさん
09/07/10 20:21:45
ありがとうございます。

>>458
Designer.vb書き換えですか。
数が20個ぐらいあるので出来ればもっとスマートな方法があればと思ったんですが…。

>>460
なぜかそれでも出てこないんです。
他のコントロールはいくつかのPanelにすべて乗せているのですが
それをすべて削除してドキュメントアウトライン上はFormしかない状態でも
プロパティウインドウのドロップダウンには相変わらず出てきてしまいます。

とりあえず必要なコントロール(が乗っているPanel)をごっそり別の空Formに移して
コードも丸ごとコピペという無理やりな方法で対処しました。

462:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/10 23:35:49
そりゃプロセス作るのは一仕事だけどな
何で変える理由がないのに変えたいんだよ

464:デフォルトの名無しさん
09/07/10 23:58:40
別のexeだろうと、Publicで公開されているアセンブリにはアクセス可能。
exeなんて単なるブートストラップです。偉い人には(ry

465:デフォルトの名無しさん
09/07/11 00:31:55
入出力の受け渡しに一時ファイルを使ってるなら、
相手を直接呼ぶのに較べてものすごーく非効率

466:462
09/07/11 02:05:06
2つのプログラムを例にあげましたが、
Sub.exe的なプログラムがこれから50個くらいできる予定でいます。
1exe=1ソリューションです。

>> 463
>プロセス作るのは一仕事
やっぱり負荷はかかるのですね。
管理がめんどそうなので変更したいと言ったのですが
却下されました。なので変更するための新たな
別の理由がほしかったのです。

>> 464
今のつくりだとMainのところにもフォームを呼び出す前に
ごにょごにょ書いてあるのですが、MainもProcess.Start
を使わずに呼べますか?

467:デフォルトの名無しさん
09/07/11 02:20:53
フォーム1個だけのソリューションを50個作って、全部exeにする?? ・・ありえんわ
何でそんな腐った設計にしたんだ・・・。

468:デフォルトの名無しさん
09/07/11 02:30:11
fork至上主義な人なんだろうか……
で、.NETで同じようなやり方がわからないから個別のアプリにしたとか。

469:デフォルトの名無しさん
09/07/11 02:37:36
そもそもプロセス分けたら普通に不便だろ。
データのやり取りとか何もないわけ?


470:デフォルトの名無しさん
09/07/11 02:39:56
>>467
え?普通そうしないの?
1ソリューションに全部入れちゃうの?

471:デフォルトの名無しさん
09/07/11 03:15:14
>>470
そりゃ必要に応じてプロジェクト分けるし、ある程度独立してたり他で使うやつとかはソリューションも分けるけど
Form毎にソリューション作ったり、全部一緒にしちゃう(小規模なのは例外)なんて事は普通やらんだろ。

Form毎にソリューション分けてexeにして、Process.Startしてるやつなんて見た事がない。

472:デフォルトの名無しさん
09/07/11 03:18:00
>>466
その50個のフォームで一つの業務アプリになるのか?
もしそうなら、一つのEXEでいいと思うがな
アプリ配布に50個のexe配布とか、exeファイルのバージョン管理50個とかやっとれん

>>470
もし50個のexe作るとしても、50個のプロジェクトは作るが、
ソリューションは一つで済ますのが普通じゃないかと思うのだが

473:デフォルトの名無しさん
09/07/11 09:01:26
VB6の頃は酔う言う作り方もしたな。.NET以降では意味がない。

474:デフォルトの名無しさん
09/07/11 09:05:51
>酔う言う
*そういう

共通部分のモジュールをソース単位で共有してたり

475:デフォルトの名無しさん
09/07/11 16:49:13
>>470
アセンブリは分割しても、特に理由がない限り
プロセスを複数にしないのが普通だと思うが。

476:デフォルトの名無しさん
09/07/12 03:59:45
Formを閉じるとき
 Me.close
のみで
 Me.dispose
をしなかった場合、どのような問題が発生しますか?

477:デフォルトの名無しさん
09/07/12 04:27:31
ガベコレが起きるまでリソースが解放されない。

まあほっといても、いつかはガベコレがリソースを解放してくれるわけですがね。
普通、Formが抱えてるリソースなんて、そんな多くないと思うし。
背景画像とか?

478:デフォルトの名無しさん
09/07/12 04:36:31
ダイアログフォームと非表示のMDI子フォームでない普通のモーダレスフォームなら、
CloseでDisposeされる。
この辺の動作はややこしいんでMSDNをよく見たほうがいい。

479:デフォルトの名無しさん
09/07/12 16:45:20
>>472
フォーム毎にexeを分けることで、業務が稼動中でもアプリを終了させずに
アップデートや不具合対応が出来るからとかなんとかで、そんな話もありました。

480:デフォルトの名無しさん
09/07/12 18:05:45
それなら共通部分をDLLに括りだすこともソース単位で共有することもできないよね?
コピペコードだらけになるんだろうな

481:デフォルトの名無しさん
09/07/12 18:37:02
今までVB6を使っていて、Visual Studio 2008に最近切り替えたのですが、
WinSockが見当たらなくなりました。
ひょっとして何か別のコントロールに変わってしまったのですか?

482:デフォルトの名無しさん
09/07/12 18:41:09
コントロールなんかない
System.NET名前空間やSystem.NET.Sockets名前空間にあるクラスを使う

483:デフォルトの名無しさん
09/07/12 19:08:32
>>480
リンクとして参照すれば共有できるよ。

484:デフォルトの名無しさん
09/07/12 19:16:37
それで>>429に対応しようとするとバージョン管理が大変すぎるだろ

485:484
09/07/12 19:22:33
>>479の間違い

486:デフォルトの名無しさん
09/07/12 19:27:41
>>482
レスありがとうございます。
System.NET名前空間やSystem.NET.Sockets名前空間について調べてみましたが、
具体的な使い方がよくわかりませんでした。
プロジェクト→クラスでの追加したうえで、Socketを利用する、ということですか?

487:デフォルトの名無しさん
09/07/12 19:32:48
必要なクラスのインスタンスを作って使う
これだけでわからなないなら、オブジェクト指向を勉強しろとしか言いようがない

488:デフォルトの名無しさん
09/07/12 23:48:15
DBの接続先をウィザードを使って設定したのですが、
なんらかの不具合が発生してDBに接続が出来なかった場合に
エラーを返すような処理を作りたいです。
例えばDBに接続するところにtyr〜catch文を入れようと思うんですが、
自動で作られている部分の為、どこにあるかわかりませんでした。
どのあたりで、DBに接続している処理が記述されているのでしょうか?

489:デフォルトの名無しさん
09/07/13 00:01:58
>>488
メニューの[デバッグ]-[ステップ イン]で見ていけばわかるんじゃね

490:488
09/07/13 00:16:19
>>489
ちょっと試してみます。
ちなみに自動で作られた処理の部分を書き換えるのって
問題ないですよね?

491:デフォルトの名無しさん
09/07/13 00:39:31
文字列の中から特定の文字列がいくつあるか数える関数を教えて

492:デフォルトの名無しさん
09/07/13 02:17:12
>>491
正規表現で探し出して、カウントする変数をインクリメントすりゃいい

493:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/13 10:11:09
>>493
Application.Run() は MSDN にも
「アプリケーション メッセージ ループの実行を開始する」
と書かれているように、イベント・ドリブンなアプリケーションのときに使うもの。
コンソールアプリなら、その Main の中に必要な処理を書けばよい。

495:デフォルトの名無しさん
09/07/13 10:38:03
現在、.NETアプリケーションでWebBrowserコントロールにおいて
フォルダのExplorer表示を出しています。そうすると必ずあの青色の
「タスクメニュー」が現れてきます。これを消す方法を探しています。

C#, C♯, C#相談室 Part53
スレリンク(tech板:199番)

にて質問してはおりましたものの回答得られませんでした。もし方法ご存知
の方おられましたら、ご指導のほど何卒よろしくお願いします。


496:デフォルトの名無しさん
09/07/13 11:01:21
>>480
DLLは使わずに、共通部分のソースファイルを共有してた。
それを修正するとかは出来ない決まりになってた。

>>484
バージョン管理は大変だったと思う。
担当したのが一部のフォーム(exe)だったから
出来上がったら渡すだけだったしね。

497:デフォルトの名無しさん
09/07/13 11:12:53
VB6の頃そのままのやり方を続けてることがあるよね。
システムハンガリアンを使わされるのはつらいよぉ。

498:デフォルトの名無しさん
09/07/13 21:10:40
>>495
知らんけど、BHO とか使わないと無理じゃね?

499:デフォルトの名無しさん
09/07/13 21:26:54
ハンガリアンってコントロール名に使ってもよろしくないの?
btnとかtxtとかlblとか
未だに使ってるんだけれども…

ダメなら初心者の内に勉強しなおしたい

500:デフォルトの名無しさん
09/07/13 21:29:32
別にOK

501:デフォルトの名無しさん
09/07/14 03:34:45
btnやtxtはアプリケーション的に意味があるからOK。
最近だと入力支援があるうえ画面も広いからbuttonHoge, fugaTextと
コントロール名をそのままくっつけることも多い。
無意味なのはクラスのインスタンスにclsHoge, objFugaと名前をつけることだな。

502:デフォルトの名無しさん
09/07/14 09:23:22
まあ実際は仕事だと変な規則のまま
伝統みたいになってるところが多いよなあ

503:453
09/07/14 17:07:24
遅くなりましたが、ICloneable.Clone で試作してみました。
ディープコピーするには、
a = b.CloneCopy()
みたいに、クローンを作成して代入しかないんですね。
結局、ディープコピーの方法を用意してあげても
a = b
が、禁止できない以上、バグの温床になりそうです。

なぜ、VBは代入演算子のオーバロードができないんだ。使えない。



504:デフォルトの名無しさん
09/07/14 17:07:55
System.IO.Directory.Delete(currentfolder)
If System.IO.Directory.GetDirectories(parentfolder).Length = 0 Then
  System.IO.Directory.Delete(parentfolder)
End If

というように空になったら親フォルダをも削除したいのですが
ときどき空になっても空と認識しない場合があります。
フォルダの削除が終わるのを待機するにはどうしたらいいでしょうか?


505:デフォルトの名無しさん
09/07/14 17:24:56
>>503
代入先の変数の型で代入の動作が変わる方がよっぽどバグの温床だろjk

506:453
09/07/14 17:37:59
>>505
喧嘩をするつもりはないですが、
この型は、a = b でもいいけれど、
こっちの型は、a = b はダメ!
というのも、実際のところ運用が難しいなと思っただけです。
ようするに、参照型を含む構造体は作るなということですね。

507:デフォルトの名無しさん
09/07/14 19:34:59
> ようするに、参照型を含む構造体は作るなということですね。
何の関係もない
まあ>>500が考える構造体と.NETが想定してる値型は別物なんだろう

508:デフォルトの名無しさん
09/07/14 20:28:10
構造体もインターフェースの実装ができるのだから、
素直にICloneableを実装すればいい。

509:デフォルトの名無しさん
09/07/14 21:05:06
まあCloneが必要になるなら、多くの場合、構造体を使う意味がない
(使うべきでない)
クラスを使うべき

510:デフォルトの名無しさん
09/07/14 21:10:19
ICloneable.Clone()はobject型だからboxingが発生しちゃうんだよね。
C++などで構造体を使うケースは、まずクラスを使うものだと思って間違いない。

511:デフォルトの名無しさん
09/07/14 21:26:00
せめてクラス/構造体ではなくC++/CLIみたいに参照型/値型って命名だったら…
453には無力だけど勘違いは多少減ったかも知れない

512:デフォルトの名無しさん
09/07/14 21:26:01
>>506の指摘はあながち的外れではないわな
構造体を使うのが間違ってる
もともと参照型なら問題にならない

513:デフォルトの名無しさん
09/07/14 21:29:37
vb.netではC言語で言うところのポインタはないのですか?
名前が違うだけで中身が同じ構造体を処理したいんだけど。

514:デフォルトの名無しさん
09/07/14 21:32:07
>>511
C++/CLIでは参照クラス/値クラスだよ
参照型/値型とクラス/値型は意味が違う

>>513
参照型
クラス

515:デフォルトの名無しさん
09/07/14 21:37:28
C++/CLIのは文書で説明してもややこしいだけだな。
参照型 ref class/ref struct
値型   value class/value struct
classとstructの違いはメンバーのスコープのデフォルトがprivateかpublicかの違いだけ。

値型はユーザー定義(構造を持った)値型とプリミティブ(基本)型の2つ。

516:デフォルトの名無しさん
09/07/14 21:41:47
>>513
ない

517:デフォルトの名無しさん
09/07/14 21:42:51
enum classも忘れないであげてください
プリミティブ型というとプリミティブ型も構造体だろとか言う奴がでてきそうだが
.NETではプリミティブ型は実際に存在する
型情報を擬装してるだけ

518:デフォルトの名無しさん
09/07/14 21:43:11
C++/CLI持ち出すんだからそれは当然知ってる
VBが参照型と値型をわけるのにClass/Structureってキーワードを使ったのが残念だったという話

>>513
そんな古くさいことは古くさい言語でやってれば十分です、みたいな

519:デフォルトの名無しさん
09/07/14 21:46:00
そういえばVBにはunsafeはなかったね。

520:デフォルトの名無しさん
09/07/14 22:10:11
>>513
考え方が違うんだ
コピーが渡るかポインタが渡るかは型の種類によって決まる。
前者は値型、後者は参照型と呼ばれる。構造体は値型。
ポインタ渡しされるようにするには構造体ではなくクラスとして定義する

521:デフォルトの名無しさん
09/07/14 22:12:34
で、クラスとして定義すれば、

> 名前が違うだけで中身が同じ構造体を処理したい

は実現できるの?

522:デフォルトの名無しさん
09/07/14 22:18:37
StructLayout属性、FieldOffset属性で何とかなるが、
メモリ上のイメージを意識するようなプログラムは、
プラットフォーム呼び出しなどをのぞき極力避けるべきだな。

523:デフォルトの名無しさん
09/07/14 22:21:30
へー。できるんだ。知らなかった。
StructLayout/FieldOffset 属性って P/Invoke のときにしか使えないもんだと思ってた。

>>513 じゃないけど、勉強になったよ。教えてくれてありがとう。

524:デフォルトの名無しさん
09/07/14 22:36:23
VBの超手抜き機能、遅延バインディングを忘れてはいないか?

525:デフォルトの名無しさん
09/07/14 22:56:29
VisualStudio使ってるとイチイチ警告出るからウザイ

526:デフォルトの名無しさん
09/07/14 23:01:54
VB2010では「DLRを利用したメタプログラミング」と言い張れます

527:デフォルトの名無しさん
09/07/14 23:56:13
MethodInvoker を使って子スレッドから親コントロールの値を変える一番簡単なサンプルコードをお願いします
C#だとあるんだけど構文が特殊でぜんぜんわかりません
TextBox1.text="hoge"
TextBox2.text="hogehoge"
これをやりたんです

お願いします

528:デフォルトの名無しさん
09/07/15 00:03:57
C#のソースがあるならネットにコンバータが転がってるから変換してみれ

529:デフォルトの名無しさん
09/07/15 00:16:12
俺はこう書いてるけど、やたらめんどくさいね。C#だともっと簡単なんだっけ?

Delegate Sub hogeDelegate(ByVal c As Control, ByVal s As String)

Sub SetText(ByVal c As Control, ByVal s As String)
  c.Text = s
End Sub

Sub ThreadSafe_SetText(ByVal c As Control, ByVal s As String)
  c.Invoke(New hogeDelegate(AddressOf SetText), c, s)
End Sub

で、使うときに
ThreadSafe_SetText(TexxtBox1, "hoge")

530:デフォルトの名無しさん
09/07/15 00:24:36
スペシャルありがとうございます!
ちょっとやってみます!

C#は仮想関たら使って意味がわかんないんですが、かえってこの方が意味がわかりやすいですね

531:デフォルトの名無しさん
09/07/16 02:31:27
画面をキャプチャーして高速で画像を処理したいのですが
画面をモノクロでキャプチャーすることは出来ますか?

やりたいのは
キャプチャーしたデータを2色に変換
手持ちの2色の画像データと比較して類似部分を調べる
というものなのですが、キャプチャーの段階で2色ができれば
変換の手間が省けるかなと思いました。
100*100ピクセルくらいのサイズの画像を
一秒以内に何十枚か処理したいです。

532:デフォルトの名無しさん
09/07/16 03:22:41
VS2008 でプログラム内からGridViewを複製し、
複数個のGridViewを表示しようとしているのですが、
そもそもGridViewにはDataTableみたくCloneメソッドは用意されていないのでしょうか?

というのも、プログラム内からGridViewのインスタンスを作成し、行>列・・・色 等を
作成していけば確かにGridViewを動的に作成する事はできるのですが、
面倒です。

DataTableにはDataTable.Cloneというメソッドが用意されているのに、
GridViewにはGridViewの構造をコピーするメソッド(機能)は用意されていないのでしょうか?



533:デフォルトの名無しさん
09/07/16 09:39:30
>>531
>一秒以内に何十枚か
VB単体だと難しそうだねえ。
どっかでライブラリ (DLL) 探してきて (勿論、C/C++ で自作も可)
P/Invoke で呼び出すとかした方がいいかも知んない。

>>532
マルチすんな糞が

534:デフォルトの名無しさん
09/07/16 09:59:27
APIべったりでできないことはないだろうけどVB関係ないしVBでやる意味もないな
画像処理はせめてポインタ使える言語でやった方が…

535:デフォルトの名無しさん
09/07/16 10:05:14
OpenCVでいいじゃないか

536:デフォルトの名無しさん
09/07/17 09:27:16
教えてください
#Region定義行や関数の頭としっぽの左側にソースを隠すことができる
+マークがありますけど、この呼び方はなんというのでしょうか?
キーボードショートカット操作で隠したり表示させたりする方法を
検索したいのですが用語がわからず困っています。

537:デフォルトの名無しさん
09/07/17 09:39:36
>>536
コードをアウトライン表示する/非表示にする

538:デフォルトの名無しさん
09/07/17 18:14:54
フォームのプロパティにStartpositionがないのですが、どうしてですか?

539:デフォルトの名無しさん
09/07/18 00:16:04
作り手がそうしてるから

540:デフォルトの名無しさん
09/07/18 02:59:07
>>538
あるよ

541:デフォルトの名無しさん
09/07/18 21:16:58
System.Net.Dnsでは、アドレスとホスト名しか参照できないみたいなんですが、
txtレコードをクエリするいい方法ないですか?

外部コンポーネントで何かないか、
WindowsAPIで呼び出してできる例とかあれば良いんですが

それ以外で思いつくのは
NSLOOKUPを呼び出す
ソケットでDNSクエリ自作
ぐらいだが、どっちもあんまりやりたくない


542:デフォルトの名無しさん
09/07/18 21:31:27
nslookupもどきが可能になるコンポーネントがあったような・・・
これだったかな?
URLリンク(www.codeproject.com)

543:デフォルトの名無しさん
09/07/18 22:44:33
iphelper API でできた気がする。確か、MX は引けた。

544:デフォルトの名無しさん
09/07/19 12:22:30
非常に初歩的で申し訳ないのですが
テキストボックス(複数行)の最終行を取得するにはどうすればよいでしょうか?
TextBoxのヘルプ等見たのですが見つけられませんでした。
感覚的には
lastLine = tboInput.GetLastLine()
のような感じで求められるのではと思っているのですが。
ご存知の方ご教示お願いします。

545:デフォルトの名無しさん
09/07/19 12:40:18
ズバリってのはないと思った

末尾の文字位置から行を求める方法とか…
lastLine = tboInput.GetLineFromCharIndex(tboInput.Text.Length - 1)

546:デフォルトの名無しさん
09/07/19 12:42:18
あ、行の文字列の取得なのか
>>545で得られるのは行インデクスです

547:デフォルトの名無しさん
09/07/19 12:45:41
Lines()プロパティでいったん全行を取得してどうこうするのは無駄が多いかな

Dim allLines() As String = textbox.Lines()
lastLine = allLines(allLines.Length -1)

548:544
09/07/19 13:36:30
>>545-547
早速のレスありがとうございます。
>あ、行の文字列の取得なのか
分かりにくくて済みません。まさに最終行のインデックスです。

ですから>>545のご回答が教えたいただきたかったことになります。

今ほどプログラムに組み込んだところうまくいきました。
大変助かりました。ありがとうございました。
>>547も参考にさせていただきます。

549:デフォルトの名無しさん
09/07/20 02:39:47
MaskedTextBoxで時間の入力欄を作っております。
入力欄をhh時mm分という表記にしたのですが、hhを入力した後、
カーソルを"時"の後ろに自動で動くようにしたいと思っています。
(mmからbackspaceで戻った際も同様にカーソルを移動させたい)
ACCESSでは特にプログラム組まなくてもそのような動作が出来ていたのですが
、VB.NETでは自分で実装が必要ですよね?
どのようにすればいいか教えてください。
お願いいたします。

550:デフォルトの名無しさん
09/07/20 05:11:47
共有ファイルサーバー上にAccessのmdbファイルを置いて、
各PC上からVB.NETで作成したアプリで接続するような形のシステム
を作っているのですが、ネットワークが繋がらない等の理由で
DBにアクセス出来なかったときにエラーを返す処理をどのように
すればよいかわかりません。
現在は、下記のような方法で起動時にDBのテーブルからデータが正常に取得
出来なかった場合、エラーを返すようにしています。

try
〜TableAdapter.Fill(〜dataset.〜テーブル)
catch
Msgbox("〜テーブルからデータを取得できませんでした")
end try

この場合だと、DBに接続出来なかったのか、テーブルに不正なデータが入っていて
取得出来なかったのか判断がつきません。
現在DBへ接続しているのかという状況を返すメソッドがあれば教えてください。

551:デフォルトの名無しさん
09/07/20 13:31:12
>>550

ふつー、catch でexception拾うだろ。


552:デフォルトの名無しさん
09/07/20 13:35:09
まあ最初の2行で既に失敗臭がするけどな。

553:デフォルトの名無しさん
09/07/20 14:01:39
>>552
俺も最初の2行でもう読む気うせたw

554:デフォルトの名無しさん
09/07/20 15:42:09
>>553
Accessって時点で地雷臭しかしないからな

555:デフォルトの名無しさん
09/07/20 15:45:08
Accessというよりmdbを共有するってのがな

556:550
09/07/20 17:26:18
>>555
じゃあどうすればいいんですか?
DBサーバーは会社で立てれないんでmdbファイルを共有くらいしか
思いつきませんでした。
納期は迫ってますが、自社から依頼された開発なのである程度は自分で
仕様決めてよいので今からでもなんとか変更できます。
アドバイス下さい。

557:デフォルトの名無しさん
09/07/20 17:28:38
DB サーバーを立てられない、ってことなら、壊れるのを覚悟で mdb でいいだろ。

558:デフォルトの名無しさん
09/07/20 17:41:09
>>556
そうだな。
じゃあ、せめて同時には一人しかアクセスできないようにするかな。


559:550
09/07/20 17:52:42
>>558
すみません。
書いてませんでしたが、同時アクセスは出来ないようします。
基本的にスタンドアロンで問題無いシステムなんですが、
各自のパソコンから使えるようにしたかったので、mdbファイルを
共有ファイルサーバー上に置くようにしました。
コーディングはほぼ完了したのですが、同時アクセス出来ないような仕組みは特に
作ってません。
mdbファイル側で共有設定してないから2台以上の接続があったら勝手にはじいてくれる
と思ってるのですが、処理を組み込んだ方がいいですか?

560:デフォルトの名無しさん
09/07/20 17:56:13
処理しないと例外で落ちるだろ

561:550
09/07/20 18:03:24
>>560
そのような処理のやり方がわからなかったので、
現状ではtableadapter.Fillの時点で例外を拾ってエラーを吐くように
してます。
エラー吐いたらDBを他で使ってるか、データがおかしいか、ネットワークがおかしいから
時間が経ってから使用するようなルールにしようと思ってます。

562:デフォルトの名無しさん
09/07/20 18:17:39
つーか、mdb ってデフォルト共有アクセス可だろ?

563:デフォルトの名無しさん
09/07/20 18:25:10
つーかポスグレのがいい

564:550
09/07/20 18:28:56
>>562
デフォルトでは共有アクセスできないと思います。

565:デフォルトの名無しさん
09/07/20 18:33:18
つーか、mdbって使ったこと無いww

566:デフォルトの名無しさん
09/07/20 18:35:29
>>564
特に指定しない限り、別のモード (たとえば、adModeShareExclusive) を設定しない限り、
ADO の接続は共有更新アクセス モードで開かれます。

嘘乙


567:550
09/07/20 18:45:55
>>566
そうなんですか?
俺の環境では出来なかったような気がしたのですが、すみません間違ってたようです。

ということは現在の作っているシステムだと、おそらく2ユーザー以上が同時に接続
出来てしまうものと思われますので、DBのユーザーテーブルにログイン中を示すフラグを
持たせる事で回避させることにしました。
他ユーザーがログイン中だとエラー吐いて画面をクローズさせる処理で問題ありませんか?

568:デフォルトの名無しさん
09/07/20 18:50:21
意味わからん。最初から排他で開けばいいだけのこと。

569:550
09/07/20 18:56:59
>>568
自分の作り方だとTableAdapter.Fillの1行でDBのOpenから取得まで
全て行っているので、どこに排他で開くコードを記載していいか
わからないんです。
納期まであまり時間が無く、簡単な方法が思いつきません。
TableAdapterのプロパティのあたり弄ればいけますかね?

570:デフォルトの名無しさん
09/07/20 19:02:02
あー。データセットだと開けっ放し、ってわけには行かないな。すまん。

571:デフォルトの名無しさん
09/07/20 19:04:17
まあ、とりあえずそのまま納品しろw

572:550
09/07/20 19:04:58
おそらく下記のようなコードになるんですよね?

Dim cn As ADODB.Connection
cn = New ADODB.Connection
cn.Mode = adModeShareExclusive
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\〜.MDB;"

これでDBを開くまではわかるんですが、
この後、TableAdapeterのFillメソッド使うのって有りですか?
open使った場合にはcloseまできちんと書くやり方にしなければいけませんか?


573:550
09/07/20 19:10:22
>>570
DataSetだと排他モードで開いておくと言うのは駄目なんですね。
やっぱりログイン中のフラグを設ける方向で考えます。

>>571
社内で使用するプログラムなのでこのまま納品して白を切ってもいけそうですが
せっかく作るんで修正します。
納期に遅れたところで上司の給料がカットされるくらいなんで全然問題ないですw

574:541
09/07/20 21:10:32
>>542
情報サンクス
しかしこれ、登録しないとダウンロードさせてくれないのか...
英語の規約とか読むの大変

>>543
ちょっとしらべてみた範囲ではやり方がわからなかった
プラットフォームSDK入れろとかなんとか、
ちょっと手軽に使うってわけにはいかないみたいだ

いろいろ探して、.NET 3.5のC#でDNSクエリするやつみつけた
んでそれ使ってみたんだが...
.NET Framework3.5って、Windows2000で動かないという事実を発見して挫折中


575:デフォルトの名無しさん
09/07/20 21:19:42
URLリンク(msdn.microsoft.com)(VS.85).aspx

でいけそう。

576:541
09/07/20 21:42:55
>>575
ありがとう
WindowsAPIですね。たしかにいけそうだが
これを.NETから呼び出すのも結構苦労しそうだ

ほかにもいくつか.NETでDNSクエリするの見つけたんで検討中
.NET Frameworkでサポートしてほしいとこだが...

WindowsAPIは最後の手段にします

577:デフォルトの名無しさん
09/07/20 21:50:59
何が苦労なんだか。P/Invoke すればいいだけだろ。

URLリンク(pinvoke.net)

とかあるし。

578:550
09/07/21 03:38:40
アプリ使用中のユーザーにフラグを設けるという案は駄目でした。
アプリが例外エラーで落ちたときにフラグをオフに出来ないからです。
なにかいい方法がありましたら教えてください。

579:デフォルトの名無しさん
09/07/21 06:10:28
アプリが例外エラーで落ちたときにフラグをオフにするようにしとけばいいのでは?

580:デフォルトの名無しさん
09/07/21 08:05:36
フラグじゃなくロックファイルを作成すればいいんじゃね?
起動したらロックファイルを作り、終了したら削除。


581:デフォルトの名無しさん
09/07/21 10:30:34
>>540
ないんです…。
あるプロジェクトのフォームプロパティにはあるんですが、別のプロジェクトのプロパティには無いんです。

582:デフォルトの名無しさん
09/07/21 15:59:36
>>580
何も解決してないからw

>>578
起動時にミューテックス作成&取得。
失敗したら誰かが使用中だと解るし、プロセスが終了したら勝手に解放される。

583:デフォルトの名無しさん
09/07/21 17:44:47
ミューテックスってネットワーク越しでもおkなの?

584:541
09/07/21 19:59:35
>>577
このサイトいいですね
構造体やら列挙やらをVB.NET用に書き換えるのに苦労するかと思ったんだ
まあ慣れた人なら機械的に変換していけるんだろうけどね

585:デフォルトの名無しさん
09/07/21 22:05:35
>>583
だめ。

バカだなぁ、おまえら。そういうときのために DB サーバーがあるんだろ?
・・・あれ?

586:デフォルトの名無しさん
09/07/21 22:09:21
だから共有フォルダにロックファイル作ればいいんだお

587:デフォルトの名無しさん
09/07/21 23:45:08
ミューテックスってデバッグ時に■で終了しても解放されるの?

588:デフォルトの名無しさん
09/07/22 00:05:16
ファイル開いてるときに強制終了したってファイルは閉じといてくれるだろ?
そういうことだよ

589:デフォルトの名無しさん
09/07/22 00:52:07
普通に排他で開いたらいいだけじゃないの?
TableAdapterとかDataSetだからダメって何言ってるの?

ところで、なんでADODBなんだよ。
TableAdapterの中見てみろ。


590:587
09/07/22 01:48:22
>>588
thx

591:デフォルトの名無しさん
09/07/22 18:41:40
ActiveReport 3.0で質問があります。

ページフッタのFormatイベント内で
最大ページ数を取得するにはどのようにしたらよいのでしょうか?

592:デフォルトの名無しさん
09/07/22 21:02:43
サードパーティ製品はスレ違い
サポートに電話して聞け

593:550
09/07/23 02:56:47
>>589
排他で開いても、Datasetに取得した時点でDBの接続は切れるんで
そのあと、他からもアクセス出来てしまいます。

とりあえず、皆様にはいろいろアドバイス頂きましたが、
時間も無い為、DB上のレコードにフラグを立てて使用中かどうか判断
することにしました。
強制終了して、フラグが立ったままになったらアプリを起動出来ない
ちょっと痛いシステムとなってしまいましたが、バレなきゃOKです。
まだ直す時間はあるので、もしアドバイスがあったらお願いします。

594:デフォルトの名無しさん
09/07/23 08:16:35
それだと結局1レコードは読まないといけない訳だ
やっぱロックファイルのがいいんでね?
で突然死対策に1秒ごとに空更新でもして
他のプログラムはファイルがあったとしても、更新時間見て
10秒以上たってたら死亡判定とか

595:デフォルトの名無しさん
09/07/23 08:19:56
監視用プログラムを別に作って常駐させとけばいんでない?

596:デフォルトの名無しさん
09/07/23 08:44:51
そんな面倒くさいことするか!?
このメモリ浪費家がッ


597:デフォルトの名無しさん
09/07/23 08:49:49
起動時にロックファイルをライトオープンで開いて
終了時にクローズするようにすれば
突然死してもファイルはクローズされるんじゃない?
多重起動の判定はロックファイルをライトオープンできるかどうかで。

598:デフォルトの名無しさん
09/07/23 09:06:09
できた
Public Class Form1

  Private sw As System.IO.StreamWriter

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Try
      sw = New System.IO.StreamWriter("\\共有PC\共有フォルダ\lockfile.txt", False, System.Text.Encoding.GetEncoding(932))
    Catch ex As Exception
      MsgBox("他の人が使ってますお")
      Application.Exit()
    End Try

  End Sub

  Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    Try
      sw.Close()
    Catch ex As Exception
    End Try
  End Sub

End Class


599:デフォルトの名無しさん
09/07/24 10:52:42
デザインモードで表示するとエラーになって赤い帯が上に出て
エラー情報としていろいろ内部コードが表示されるやつですが、
あの情報には「〜.Designer.vb」のどこの行がNGなのかが
不明なので、どこを直せばいいのかわからない場合が多い。

こういうとき、再コンパイルしてるときもあるが、ダメなときは
開発環境自体を立ち上げ直して直るときもある。

しかしそれでもダメな場合も多い。こういうときは皆さんどんな風に
して原因突き止めていますか、よろしければご指南を頂きたく。
よろしくお願いします。

600:デフォルトの名無しさん
09/07/24 14:29:29
.Designer.vbを直接修正するしかない

601:599
09/07/24 14:59:40
>>600
ですよね、で、その場合、そのどこがNGなのかの情報が、あのたくさん
出てくる内部コードの情報には出てない場合がほとんどなのでした。

どこがNGなのかがわかれば対応できるのですが、皆目情報がなくて困って
いるのでした。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4936日前に更新/199 KB
担当:undef