1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ] 前スレ VB.NET質問スレ(Part29) pc12.2ch.net/test/read.cgi/tech/1235206416/l50 テンプレは>>2 〜
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は代入演算子のオーバロードができないんだ。使えない。
504 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 17:24:56 ] >>503 代入先の変数の型で代入の動作が変わる方がよっぽどバグの温床だろjk
506 名前:453 [2009/07/14(火) 17:37:59 ] >>505 喧嘩をするつもりはないですが、 この型は、a = b でもいいけれど、 こっちの型は、a = b はダメ! というのも、実際のところ運用が難しいなと思っただけです。 ようするに、参照型を含む構造体は作るなということですね。
507 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:34:59 ] > ようするに、参照型を含む構造体は作るなということですね。 何の関係もない まあ>>500 が考える構造体と.NETが想定してる値型は別物なんだろう
508 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 20:28:10 ] 構造体もインターフェースの実装ができるのだから、 素直にICloneableを実装すればいい。
509 名前:デフォルトの名無しさん [2009/07/14(火) 21:05:06 ] まあCloneが必要になるなら、多くの場合、構造体を使う意味がない (使うべきでない) クラスを使うべき
510 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:10:19 ] ICloneable.Clone()はobject型だからboxingが発生しちゃうんだよね。 C++などで構造体を使うケースは、まずクラスを使うものだと思って間違いない。
511 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:26:00 ] せめてクラス/構造体ではなくC++/CLIみたいに参照型/値型って命名だったら… 453には無力だけど勘違いは多少減ったかも知れない
512 名前:デフォルトの名無しさん [2009/07/14(火) 21:26:01 ] >>506 の指摘はあながち的外れではないわな 構造体を使うのが間違ってる もともと参照型なら問題にならない
513 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:29:37 ] vb.netではC言語で言うところのポインタはないのですか? 名前が違うだけで中身が同じ構造体を処理したいんだけど。
514 名前:デフォルトの名無しさん [2009/07/14(火) 21:32:07 ] >>511 C++/CLIでは参照クラス/値クラスだよ 参照型/値型とクラス/値型は意味が違う >>513 参照型 クラス
515 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:37:28 ] C++/CLIのは文書で説明してもややこしいだけだな。 参照型 ref class/ref struct 値型 value class/value struct classとstructの違いはメンバーのスコープのデフォルトがprivateかpublicかの違いだけ。 値型はユーザー定義(構造を持った)値型とプリミティブ(基本)型の2つ。
516 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:41:47 ] >>513 ない
517 名前:デフォルトの名無しさん [2009/07/14(火) 21:42:51 ] enum classも忘れないであげてください プリミティブ型というとプリミティブ型も構造体だろとか言う奴がでてきそうだが .NETではプリミティブ型は実際に存在する 型情報を擬装してるだけ
518 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:43:11 ] C++/CLI持ち出すんだからそれは当然知ってる VBが参照型と値型をわけるのにClass/Structureってキーワードを使ったのが残念だったという話 >>513 そんな古くさいことは古くさい言語でやってれば十分です、みたいな
519 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 21:46:00 ] そういえばVBにはunsafeはなかったね。
520 名前:デフォルトの名無しさん [2009/07/14(火) 22:10:11 ] >>513 考え方が違うんだ コピーが渡るかポインタが渡るかは型の種類によって決まる。 前者は値型、後者は参照型と呼ばれる。構造体は値型。 ポインタ渡しされるようにするには構造体ではなくクラスとして定義する
521 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:12:34 ] で、クラスとして定義すれば、 > 名前が違うだけで中身が同じ構造体を処理したい は実現できるの?
522 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:18:37 ] StructLayout属性、FieldOffset属性で何とかなるが、 メモリ上のイメージを意識するようなプログラムは、 プラットフォーム呼び出しなどをのぞき極力避けるべきだな。
523 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:21:30 ] へー。できるんだ。知らなかった。 StructLayout/FieldOffset 属性って P/Invoke のときにしか使えないもんだと思ってた。 >>513 じゃないけど、勉強になったよ。教えてくれてありがとう。
524 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:36:23 ] VBの超手抜き機能、遅延バインディングを忘れてはいないか?
525 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:56:29 ] VisualStudio使ってるとイチイチ警告出るからウザイ
526 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:01:54 ] VB2010では「DLRを利用したメタプログラミング」と言い張れます
527 名前:デフォルトの名無しさん [2009/07/14(火) 23:56:13 ] MethodInvoker を使って子スレッドから親コントロールの値を変える一番簡単なサンプルコードをお願いします C#だとあるんだけど構文が特殊でぜんぜんわかりません TextBox1.text="hoge" TextBox2.text="hogehoge" これをやりたんです お願いします
528 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 00:03:57 ] C#のソースがあるならネットにコンバータが転がってるから変換してみれ
529 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/07/15(水) 00:24:36 ] スペシャルありがとうございます! ちょっとやってみます! C#は仮想関たら使って意味がわかんないんですが、かえってこの方が意味がわかりやすいですね
531 名前:デフォルトの名無しさん [2009/07/16(木) 02:31:27 ] 画面をキャプチャーして高速で画像を処理したいのですが 画面をモノクロでキャプチャーすることは出来ますか? やりたいのは キャプチャーしたデータを2色に変換 手持ちの2色の画像データと比較して類似部分を調べる というものなのですが、キャプチャーの段階で2色ができれば 変換の手間が省けるかなと思いました。 100*100ピクセルくらいのサイズの画像を 一秒以内に何十枚か処理したいです。
532 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 03:22:41 ] VS2008 でプログラム内からGridViewを複製し、 複数個のGridViewを表示しようとしているのですが、 そもそもGridViewにはDataTableみたくCloneメソッドは用意されていないのでしょうか? というのも、プログラム内からGridViewのインスタンスを作成し、行>列・・・色 等を 作成していけば確かにGridViewを動的に作成する事はできるのですが、 面倒です。 DataTableにはDataTable.Cloneというメソッドが用意されているのに、 GridViewにはGridViewの構造をコピーするメソッド(機能)は用意されていないのでしょうか?
533 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:39:30 ] >>531 >一秒以内に何十枚か VB単体だと難しそうだねえ。 どっかでライブラリ (DLL) 探してきて (勿論、C/C++ で自作も可) P/Invoke で呼び出すとかした方がいいかも知んない。 >>532 マルチすんな糞が
534 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:59:27 ] APIべったりでできないことはないだろうけどVB関係ないしVBでやる意味もないな 画像処理はせめてポインタ使える言語でやった方が…
535 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 10:05:14 ] OpenCVでいいじゃないか
536 名前:デフォルトの名無しさん [2009/07/17(金) 09:27:16 ] 教えてください #Region定義行や関数の頭としっぽの左側にソースを隠すことができる +マークがありますけど、この呼び方はなんというのでしょうか? キーボードショートカット操作で隠したり表示させたりする方法を 検索したいのですが用語がわからず困っています。
537 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 09:39:36 ] >>536 コードをアウトライン表示する/非表示にする
538 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 18:14:54 ] フォームのプロパティにStartpositionがないのですが、どうしてですか?
539 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:16:04 ] 作り手がそうしてるから
540 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 02:59:07 ] >>538 あるよ
541 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 21:16:58 ] System.Net.Dnsでは、アドレスとホスト名しか参照できないみたいなんですが、 txtレコードをクエリするいい方法ないですか? 外部コンポーネントで何かないか、 WindowsAPIで呼び出してできる例とかあれば良いんですが それ以外で思いつくのは NSLOOKUPを呼び出す ソケットでDNSクエリ自作 ぐらいだが、どっちもあんまりやりたくない
542 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 21:31:27 ] nslookupもどきが可能になるコンポーネントがあったような・・・ これだったかな? www.codeproject.com/KB/IP/dnslookupdotnet.aspx
543 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 22:44:33 ] iphelper API でできた気がする。確か、MX は引けた。
544 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:22:30 ] 非常に初歩的で申し訳ないのですが テキストボックス(複数行)の最終行を取得するにはどうすればよいでしょうか? TextBoxのヘルプ等見たのですが見つけられませんでした。 感覚的には lastLine = tboInput.GetLastLine() のような感じで求められるのではと思っているのですが。 ご存知の方ご教示お願いします。
545 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:40:18 ] ズバリってのはないと思った 末尾の文字位置から行を求める方法とか… lastLine = tboInput.GetLineFromCharIndex(tboInput.Text.Length - 1)
546 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:42:18 ] あ、行の文字列の取得なのか >>545 で得られるのは行インデクスです
547 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:45:41 ] Lines()プロパティでいったん全行を取得してどうこうするのは無駄が多いかな Dim allLines() As String = textbox.Lines() lastLine = allLines(allLines.Length -1)
548 名前:544 mailto:sage [2009/07/19(日) 13:36:30 ] >>545-547 早速のレスありがとうございます。 >あ、行の文字列の取得なのか 分かりにくくて済みません。まさに最終行のインデックスです。 ですから>>545 のご回答が教えたいただきたかったことになります。 今ほどプログラムに組み込んだところうまくいきました。 大変助かりました。ありがとうございました。 >>547 も参考にさせていただきます。
549 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 02:39:47 ] MaskedTextBoxで時間の入力欄を作っております。 入力欄をhh時mm分という表記にしたのですが、hhを入力した後、 カーソルを"時"の後ろに自動で動くようにしたいと思っています。 (mmからbackspaceで戻った際も同様にカーソルを移動させたい) ACCESSでは特にプログラム組まなくてもそのような動作が出来ていたのですが 、VB.NETでは自分で実装が必要ですよね? どのようにすればいいか教えてください。 お願いいたします。
550 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 05:11:47 ] 共有ファイルサーバー上にAccessのmdbファイルを置いて、 各PC上からVB.NETで作成したアプリで接続するような形のシステム を作っているのですが、ネットワークが繋がらない等の理由で DBにアクセス出来なかったときにエラーを返す処理をどのように すればよいかわかりません。 現在は、下記のような方法で起動時にDBのテーブルからデータが正常に取得 出来なかった場合、エラーを返すようにしています。 try 〜TableAdapter.Fill(〜dataset.〜テーブル) catch Msgbox("〜テーブルからデータを取得できませんでした") end try この場合だと、DBに接続出来なかったのか、テーブルに不正なデータが入っていて 取得出来なかったのか判断がつきません。 現在DBへ接続しているのかという状況を返すメソッドがあれば教えてください。
551 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 13:31:12 ] >>550 ふつー、catch でexception拾うだろ。
552 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 13:35:09 ] まあ最初の2行で既に失敗臭がするけどな。
553 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 14:01:39 ] >>552 俺も最初の2行でもう読む気うせたw
554 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 15:42:09 ] >>553 Accessって時点で地雷臭しかしないからな
555 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 15:45:08 ] Accessというよりmdbを共有するってのがな
556 名前:550 mailto:sage [2009/07/20(月) 17:26:18 ] >>555 じゃあどうすればいいんですか? DBサーバーは会社で立てれないんでmdbファイルを共有くらいしか 思いつきませんでした。 納期は迫ってますが、自社から依頼された開発なのである程度は自分で 仕様決めてよいので今からでもなんとか変更できます。 アドバイス下さい。
557 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:28:38 ] DB サーバーを立てられない、ってことなら、壊れるのを覚悟で mdb でいいだろ。
558 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:41:09 ] >>556 そうだな。 じゃあ、せめて同時には一人しかアクセスできないようにするかな。
559 名前:550 mailto:sage [2009/07/20(月) 17:52:42 ] >>558 すみません。 書いてませんでしたが、同時アクセスは出来ないようします。 基本的にスタンドアロンで問題無いシステムなんですが、 各自のパソコンから使えるようにしたかったので、mdbファイルを 共有ファイルサーバー上に置くようにしました。 コーディングはほぼ完了したのですが、同時アクセス出来ないような仕組みは特に 作ってません。 mdbファイル側で共有設定してないから2台以上の接続があったら勝手にはじいてくれる と思ってるのですが、処理を組み込んだ方がいいですか?
560 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:56:13 ] 処理しないと例外で落ちるだろ
561 名前:550 mailto:sage [2009/07/20(月) 18:03:24 ] >>560 そのような処理のやり方がわからなかったので、 現状ではtableadapter.Fillの時点で例外を拾ってエラーを吐くように してます。 エラー吐いたらDBを他で使ってるか、データがおかしいか、ネットワークがおかしいから 時間が経ってから使用するようなルールにしようと思ってます。
562 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:17:39 ] つーか、mdb ってデフォルト共有アクセス可だろ?
563 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:25:10 ] つーかポスグレのがいい
564 名前:550 mailto:sage [2009/07/20(月) 18:28:56 ] >>562 デフォルトでは共有アクセスできないと思います。
565 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:33:18 ] つーか、mdbって使ったこと無いww
566 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:35:29 ] >>564 特に指定しない限り、別のモード (たとえば、adModeShareExclusive) を設定しない限り、 ADO の接続は共有更新アクセス モードで開かれます。 嘘乙
567 名前:550 mailto:sage [2009/07/20(月) 18:45:55 ] >>566 そうなんですか? 俺の環境では出来なかったような気がしたのですが、すみません間違ってたようです。 ということは現在の作っているシステムだと、おそらく2ユーザー以上が同時に接続 出来てしまうものと思われますので、DBのユーザーテーブルにログイン中を示すフラグを 持たせる事で回避させることにしました。 他ユーザーがログイン中だとエラー吐いて画面をクローズさせる処理で問題ありませんか?
568 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:50:21 ] 意味わからん。最初から排他で開けばいいだけのこと。
569 名前:550 mailto:sage [2009/07/20(月) 18:56:59 ] >>568 自分の作り方だとTableAdapter.Fillの1行でDBのOpenから取得まで 全て行っているので、どこに排他で開くコードを記載していいか わからないんです。 納期まであまり時間が無く、簡単な方法が思いつきません。 TableAdapterのプロパティのあたり弄ればいけますかね?
570 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 19:02:02 ] あー。データセットだと開けっ放し、ってわけには行かないな。すまん。
571 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 19:04:17 ] まあ、とりあえずそのまま納品しろw
572 名前:550 mailto:sage [2009/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 mailto:sage [2009/07/20(月) 19:10:22 ] >>570 DataSetだと排他モードで開いておくと言うのは駄目なんですね。 やっぱりログイン中のフラグを設ける方向で考えます。 >>571 社内で使用するプログラムなのでこのまま納品して白を切ってもいけそうですが せっかく作るんで修正します。 納期に遅れたところで上司の給料がカットされるくらいなんで全然問題ないですw
574 名前:541 mailto:sage [2009/07/20(月) 21:10:32 ] >>542 情報サンクス しかしこれ、登録しないとダウンロードさせてくれないのか... 英語の規約とか読むの大変 >>543 ちょっとしらべてみた範囲ではやり方がわからなかった プラットフォームSDK入れろとかなんとか、 ちょっと手軽に使うってわけにはいかないみたいだ いろいろ探して、.NET 3.5のC#でDNSクエリするやつみつけた んでそれ使ってみたんだが... .NET Framework3.5って、Windows2000で動かないという事実を発見して挫折中
575 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:19:42 ] msdn.microsoft.com/en-us/library/ms682100 (VS.85).aspx でいけそう。
576 名前:541 mailto:sage [2009/07/20(月) 21:42:55 ] >>575 ありがとう WindowsAPIですね。たしかにいけそうだが これを.NETから呼び出すのも結構苦労しそうだ ほかにもいくつか.NETでDNSクエリするの見つけたんで検討中 .NET Frameworkでサポートしてほしいとこだが... WindowsAPIは最後の手段にします
577 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:50:59 ] 何が苦労なんだか。P/Invoke すればいいだけだろ。 pinvoke.net/default.aspx/dnsapi/DnsQuery.html とかあるし。
578 名前:550 mailto:sage [2009/07/21(火) 03:38:40 ] アプリ使用中のユーザーにフラグを設けるという案は駄目でした。 アプリが例外エラーで落ちたときにフラグをオフに出来ないからです。 なにかいい方法がありましたら教えてください。
579 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 06:10:28 ] アプリが例外エラーで落ちたときにフラグをオフにするようにしとけばいいのでは?
580 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 08:05:36 ] フラグじゃなくロックファイルを作成すればいいんじゃね? 起動したらロックファイルを作り、終了したら削除。
581 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 10:30:34 ] >>540 ないんです…。 あるプロジェクトのフォームプロパティにはあるんですが、別のプロジェクトのプロパティには無いんです。
582 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 15:59:36 ] >>580 何も解決してないからw >>578 起動時にミューテックス作成&取得。 失敗したら誰かが使用中だと解るし、プロセスが終了したら勝手に解放される。
583 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:44:47 ] ミューテックスってネットワーク越しでもおkなの?
584 名前:541 mailto:sage [2009/07/21(火) 19:59:35 ] >>577 このサイトいいですね 構造体やら列挙やらをVB.NET用に書き換えるのに苦労するかと思ったんだ まあ慣れた人なら機械的に変換していけるんだろうけどね
585 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:05:35 ] >>583 だめ。 バカだなぁ、おまえら。そういうときのために DB サーバーがあるんだろ? ・・・あれ?
586 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:09:21 ] だから共有フォルダにロックファイル作ればいいんだお
587 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:45:08 ] ミューテックスってデバッグ時に■で終了しても解放されるの?
588 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:05:16 ] ファイル開いてるときに強制終了したってファイルは閉じといてくれるだろ? そういうことだよ
589 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:52:07 ] 普通に排他で開いたらいいだけじゃないの? TableAdapterとかDataSetだからダメって何言ってるの? ところで、なんでADODBなんだよ。 TableAdapterの中見てみろ。
590 名前:587 mailto:sage [2009/07/22(水) 01:48:22 ] >>588 thx
591 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 18:41:40 ] ActiveReport 3.0で質問があります。 ページフッタのFormatイベント内で 最大ページ数を取得するにはどのようにしたらよいのでしょうか?
592 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:02:43 ] サードパーティ製品はスレ違い サポートに電話して聞け
593 名前:550 mailto:sage [2009/07/23(木) 02:56:47 ] >>589 排他で開いても、Datasetに取得した時点でDBの接続は切れるんで そのあと、他からもアクセス出来てしまいます。 とりあえず、皆様にはいろいろアドバイス頂きましたが、 時間も無い為、DB上のレコードにフラグを立てて使用中かどうか判断 することにしました。 強制終了して、フラグが立ったままになったらアプリを起動出来ない ちょっと痛いシステムとなってしまいましたが、バレなきゃOKです。 まだ直す時間はあるので、もしアドバイスがあったらお願いします。
594 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:16:35 ] それだと結局1レコードは読まないといけない訳だ やっぱロックファイルのがいいんでね? で突然死対策に1秒ごとに空更新でもして 他のプログラムはファイルがあったとしても、更新時間見て 10秒以上たってたら死亡判定とか
595 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:19:56 ] 監視用プログラムを別に作って常駐させとけばいんでない?
596 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:44:51 ] そんな面倒くさいことするか!? このメモリ浪費家がッ
597 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:49:49 ] 起動時にロックファイルをライトオープンで開いて 終了時にクローズするようにすれば 突然死してもファイルはクローズされるんじゃない? 多重起動の判定はロックファイルをライトオープンできるかどうかで。
598 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/07/24(金) 10:52:42 ] デザインモードで表示するとエラーになって赤い帯が上に出て エラー情報としていろいろ内部コードが表示されるやつですが、 あの情報には「〜.Designer.vb」のどこの行がNGなのかが 不明なので、どこを直せばいいのかわからない場合が多い。 こういうとき、再コンパイルしてるときもあるが、ダメなときは 開発環境自体を立ち上げ直して直るときもある。 しかしそれでもダメな場合も多い。こういうときは皆さんどんな風に して原因突き止めていますか、よろしければご指南を頂きたく。 よろしくお願いします。
600 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 14:29:29 ] .Designer.vbを直接修正するしかない
601 名前:599 [2009/07/24(金) 14:59:40 ] >>600 ですよね、で、その場合、そのどこがNGなのかの情報が、あのたくさん 出てくる内部コードの情報には出てない場合がほとんどなのでした。 どこがNGなのかがわかれば対応できるのですが、皆目情報がなくて困って いるのでした。
602 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 16:03:21 ] エラー一覧のエラーとか警告に出るけどなぁ
603 名前:599 [2009/07/24(金) 17:06:40 ] >>602 >エラー一覧 今使っているのはVS2005なのですが、デザイナー画面が出るところに ------ パスの形式が無効です。 非表示 場所 System.IO.Path.NormalizePathFast(String path, Boolean fullCheck) 場所 System.IO.Path.NormalizePath(String path, Boolean fullCheck) 場所 System.IO.Path.GetFullPathInternal(String path) 場所 System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile) 場所 Microsoft.VisualStudio.Design.VSTypeResolutionService.AddProjectDependencies(Project project) 場所 Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly() 場所 Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, String description) ・・・ ------- こういった内部コードが現れては来るのですが何行目が悪いという情報がなく、 「エラー一覧」の中には特に表示されないのでした。どこがNGなのかわかれば ありがたいのですが、それが出て来ないのでした・・・
604 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:53:06 ] もっと下の方見たらどこかに自分のクラス名があるだろ その一つ上の行のメソッド名をDesigner.vb内で検索
605 名前:599 [2009/07/24(金) 19:23:30 ] >>604 どうもです!探してやってみます!・・・と思って、今もう一度デザイナー を起動したら・・・、ありゃ?何にも他のことしてないのにナンデだろ?? 直ってちゃんと出てる。。。なんだろぉ〜。 この次またNGになったらその仕方で見てみます。助かりました、大変 ご迷惑、おかけしてすみませんでした。。。 あれーそれにしても・・・。
606 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 10:57:36 ] VB.NET2003で Dim app As New Excel.Application Dim books As Excel.Workbooks Dim book As Excel.Workbook Dim sheets As Excel.Sheets Dim sheet As Excel.Worksheet のように定義すると、端末によってNew Excel.ApplicationやExcel.Workbooksが定義されていませんというようなエラーがでます。 Imports System.Runtime.InteropServices Imports Microsoft.Office.Core は記述してあり、Microsoft Excel 11.0 Object Libraryは追加してあります。 どの端末もVB2003はインストール済みで上記の設定はしてあるのですが、端末によってこのエラーが出るときと出ないときがあります。 このエラーがでないようにするにはどうすればいいのでしょうか?
607 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:08:32 ] Office がインストールされてないんじゃね?
608 名前:606 mailto:sage [2009/07/25(土) 12:26:01 ] >>607 ありがとうございます。 Officeはインストールされています。 上記のような現象が起きている方はいませんか?
609 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:40:21 ] あとは、PIA がインストールされてないとか?
610 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:59:09 ] OfficeのPIAは、.NET1.1以降が予めインストール済みの環境で Officeのインストールを実行しないと入らないからなあ。
611 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:18:40 ] >>606 Microsoft Excel 11.0 Object Libraryへの参照をプロジェクトに追加したときに VSが自動的に生成するCOMラッパークラスの入ったdll(生成されるファイルのファイル名は忘れた) が実行環境にインストールされてないんでしょ。 プロジェクトエクスプローラを「全てのファイルを表示」にしてる? っていうか、こんな初歩的なことも知らないとしたら相当ヤバいな。
612 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:30:29 ] >>611 Interop.Excel.dll Interop.Office.dll あたり?
613 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:25:49 ] >>589 だからコネクションは自分で明示的に開けばいいの。 なんのためにConnectionプロパティが生成されると思ってんだ。 TableAdapterだからって接続したままに出来ない理由はない。
614 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:27:05 ] >>589 じゃなくて>>593 だった。 自分に突っ込んでどうする…
615 名前:606 mailto:sage [2009/07/25(土) 19:13:53 ] >>609-612 ありがとうございます。 Interop.Excel.dll Interop.Microsoft.Office.Core.dll は存在して、参照設定から見えていたと思います。 >OfficeのPIA 他の人もアセンブリの問題で色々苦労していたようなので、これが原因なのかもしれません。 Dim app As Object Dim book As Object Dim sheet As Object app = CreateObject("Excel.Application") こんな感じだと正常に動作するようなんですが…
616 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:35:52 ] >>615 ところでそれってソース開いたときにエラーとかじゃ無くって 実行するときにエラーってことだよね? 念のため
617 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:08:07 ] >>615 人の話ちゃんと聞こうよ。 参照設定は大丈夫か?なんていってないでしょ。 実行環境の話をしてるんだよ。 その2つがユーザーのマシンにもちゃんと入ってるの? いやまず間違いなく入ってないんだってば・・・
618 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:06:43 ] 開発環境 VS 2008 アプリケーション固有のメッセージを外部ファイルとして保存して、 プログラム側で起動時に読み込むようなものを作成しています。 上記のプログラムを作成するための定石、または、.NET Framework標準の クラスなどが存在していますか? ご存知の方がいれば、教えてください。 現在は外部ファイルをXMLにして、 DataTableのReadXMLで読み込む手法をとっています。
619 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:08:51 ] ResourceManager とかだな。 プロジェクトのプロパティから追加すれば、簡単に扱えるよ。
620 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:11:39 ] その固有のメッセージってのはアプリのインストール後にテキストエディタとかで修正したりするモンなの?
621 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:15:49 ] VB2008EEでExcelにデータを書き出すソフトを作っています。 使う人によってExcelのバージョンがまちまちなのでCOMは使わず以下のような感じです。 Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object xlApp = CreateObject("Excel.Application") xlBook = xlApp.Workbooks.open(パス) xlSheet = xlBook.Worksheets(1) xlSheet.Cells(1, 1).Value = "あああ" '※1 xlSheet.Cells(1, 2).Value = "いいい" '※2 xlApp.DisplayAlerts = False xlBook.Save() xlBook.Close() xlApp.Quit() xlSheet = Nothing xlBook = Nothing xlApp = Nothing GC.Collect() データを入力する部分で、※1だけなら問題ないですが※2を追加するとプロセスが残ってしまいます。 何が原因なのでしょうか。 開発環境のExcelは2000です。
622 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:24:44 ] 思いっきりCOM使ってるよそれ vb.net excel プロセス でググるといろいろ出てくる ちゃんと作るのは非常に面倒だからそこだけWSHのVBSなんかで書いてもいいよ
623 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:42:22 ] >>619 情報ありがとうございます。 試してみます。 >>620 テキストファイルで修正できることを前提にしています。 開発終了後にそんな日が来るとは思いませんが、 どっかのエロいアーキテクトが書いたらしい規約に従う必要があるので……
624 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:45:48 ] >>622 レスありがとうございます。 COM参照を先にするかあとにするかだけで処理は一緒って認識で合ってますか?オブジェクト使う度に解放が必要と。 WSHは使ったこと無いので調べてみます。
625 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:49:39 ] いやGCに頼るのは不確実だからMarshal.ReleaseComObjectを使って 必ず逐一全て手動で解放する必要がある
626 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:07:25 ] >>616 ソリューションファイルを開いたときに、New Excel.ApplicationやExcel.Workbooksの所に波線が引かれ、コンパイルができないのです。 >>617 dllが存在しないと、参照設定のExcelとかInterop.Microsoft.Office.Coreのところに三角のマークが出るような気がしました。 確かに全てのファイルを表示にはしていなかった可能性があるので、obj配下にdllが存在しなかったのかもしれません。
627 名前:606,626 mailto:sage [2009/07/25(土) 23:12:27 ] 参照設定のExcel等の所に三角マークが出ていなかったので、Interop.Excel.dll等は存在するものと思ったのです。
628 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:17:26 ] >>625 できました。ありがとうございました。 ちなみに>>621 はMSのサンプルを真似たものなんですが、結局全然違うコードになりました。 あのサンプルは一体何だったんでしょうか…。
629 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:22:08 ] >>626 それ一番最初に書くところ みんな実行時だと思ってたんだから でね、それは単に参照が無いだけだから
630 名前:606 mailto:sage [2009/07/25(土) 23:26:56 ] >>629 ありがとうございます。 プロジェクトのディレクトリごとコピーしているので、obj配下にdllはあるのではないかと思います。 参照設定でも三角マークは出ていませんし。 全く同じコードをプロジェクトごとコピーしたのに、端末によってコンパイルができない理由がわからないのです。
631 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:00:18 ] >>630 あーもう じゃ「参照が有効になってない」って言えばいい? 一度参照削除してもう一度登録しなおしてみ?
632 名前:606 mailto:sage [2009/07/26(日) 00:15:33 ] >>631 どうもです。 一度参照設定のExcel等を削除して登録し直したのですが、それでも駄目でした。 どうも端末依存でアセンブリの問題があるらしいので、それが原因のような気もしているのです。 他の人も逆に私がコンパイルできない端末でないとコンパイルできないようなことを言っていたし、 端末固有の設定がおかしいのかもしれません。
633 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:25:12 ] 2003時代にエクセルを参照したプロジェクトを複数の開発環境に持ってくことを 何度かやったことがあるけどそんな問題は起こった記憶がないな。 まさかとは思うけど、 (1) 環境ごとにエクセルのバージョンが違う (2) エクセルそのものがインストールされてない なんてことはないよね?
634 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:34:48 ] >>633 ありがとうございます。 エクセルはインストールされていて、両方2003だったと思います。 コンパイルできない端末には確かFlex Gridがインストールされているなど、特殊な設定がなされているのです。 自宅では問題なくコンパイルできていますし、やはり端末依存の問題なのかもしれません。 Marshal.ReleaseComObjectを使っても逆に不安定になったりするし、.NETからエクセルを動かすのは難しいなぁ。
635 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:48:31 ] あー それは複数のassenblyファイルがある場合だわ 消したらいいよ。
636 名前:550 mailto:sage [2009/07/26(日) 01:14:25 ] >>598 それよさそうですね。 ちょっと試してみようと思います。 ただ問題は、ロックファイルの出力先が固定になっている部分です。 mdbファイルの場所を移動しても探せるように、Connectionstringをいじれる仕様なので、 ロックファイルの出力先アドレスをxmlファイルに保存しなきゃいけないかも知れません。 納期が近い為、そこまで手が回りませんが参考になりました。 どうもありがとうございました。
637 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:17:10 ] >>635 AssemblyInfo.vbではなく、確かWindowsディレクトリ配下にアセンブリファイルがあり、それが端末によって異なっているせいで 端末によってコンパイルできたりできなかったりするような話は聞きました。 Dim app As Object Dim book As Object Dim sheet As Object app = CreateObject("Excel.Application") こんな感じに書くとコンパイルできるようなので、もうコードを書き直すしかないのかなと思っています。
638 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:43:08 ] >>636 普通app.configに書かない?
639 名前:550 mailto:sage [2009/07/26(日) 01:44:08 ] >>598 ただいま、試験的にプログラムを作って動かしたんですが、完璧ですね。 streamwriterをcloseしない限りは、そのアプリが専有で開いてるから 他からのアクセスが出来ないってことですね。 プログラムが異常終了しても自動的にlockfileへの専有が外れるから 他からのアクセスが可能になるということですね。 これかなりいいと思います。 ありがとうございました。
640 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 02:01:26 ] >>639 当初の質問と関係なくなってるなw
641 名前:550 mailto:sage [2009/07/26(日) 02:33:32 ] lockfileを隠しファイルにしたかったんですが、隠しファイルにすると VBから見えてないのか、Streamwriterで例外エラー拾いますね。 たいした問題じゃないので我慢するしかないですねこれは・・・
642 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:18:52 ] 排他Openできるんならコネクションを開いたままにしとけばいいって何度も言ってるのに なんでわざわざ独自に作りこむのかね。
643 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:24:27 ] その方法がわからないからだろハゲ
644 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:58:34 ] 全コードで TableAdapter の Connection 書き換えれば 排他で開きっ放しに出来るだろうけど手間考えたら >>598 みたいな方法が一番簡単だな
645 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:09:33 ] そもそもその排他オープンが安全なのかが怪しいんだよね それなら別次元の排他処理をしてしまうのもあり だいたいちゃんとするならDBサーバーを入れるべきだし。
646 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 06:22:32 ] Dim psi As New System.Diagnostics.ProcessStartInfo Dim p As System.Diagnostics.Process Dim ssPath As String = "C:\Program Files\Microsoft Visual Studio\VSS\win32\ss.exe" Dim ssDir As String = "C:\Program Files\Microsoft Visual Studio\VSS\win32" Dim ssUser = "user" Dim ssPwd = "user" Dim GetPath = "D:\work" If ssPath.IndexOf(" ") > 0 AndAlso ssPath.Substring(0, 1) <> """" Then ssPath = String.Format("""{0}""", ssPath) End If 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = "/c " & ssPath & " get -gtm " & sName & " -GL" & GetPath & " -Y" & ssUser & "," & ssPwd '起動 p = System.Diagnostics.Process.Start(psi) result = p.StandardOutput.ReadToEnd こんな感じでVSSから最新バージョンを取得しているのですが、データベースのパスを指定したいと思い、 psi.Arguments = "/c set SSDIR=" & ssDir & " && " & ssPath & " get -gtm " & sName & " -GL" & GetPath & " -Y" & ssUser & "," & ssPwd のようにset SSDIRを追加すると取得できなくなってしまいます。 どこが間違っているのでしょうか?
647 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 07:40:11 ] &で文字列連結すんな
648 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:02:57 ] >>647 ildasmで見ると、String.Concatで連結されているのが確認できるよ。 こういう一連の連結に使う分には何ら問題は無い。
649 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:06:19 ] && だと環境変数は引き継がれないみたいだね
650 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:22:00 ] 連結後に更に連結するなら、せめてString.Formatを…。 読みにくくてかなわん。
651 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:36:24 ] 少しヒント cmd /c"set AAA=XXX && echo %AAA%" %AAA% cmd /V:ON /c"set AAA=XXX && echo !AAA!" XXX
652 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:07:00 ] 複数のBMPの画像をAVI動画に変換する方法を大まかにおしえて
653 名前:646 mailto:SAGE [2009/07/28(火) 00:10:18 ] みなさんありがとうございます。 週末に試してみようと思います。
654 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:10:35 ] >>652 1.Windows ムービー メーカー を起動する 2.対象の画像を読み込む 3.ムービーの発行でDV-AVIを選んで実行 4.AVI動画が完成\(^o^)/
655 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:21:11 ] ODP.NETを使用し、パッケージをコールしてDataSetを取得し、 コンボボックスのDataSourceにDataTableを入れたのですが、 中身が表示されません。 DisplayMemberとValueMemberプロパティにも項目名を設定しています。 セットした後に、SelectedValueとSelectedTextの値を見ると、 SelectedValueには値が入っていますが、SelectedTextには値がありません。 パッケージをコールすると、 表示する用の文字列と裏で持つ用の文字列を複数レコード取得します。 調べても、問題ないと思うのですが何が悪いのでしょうか? combo1.DataSource = DataTable combo1.ValueMember = "AAA" combo1.DisplayMember = "BBB" 試しに、AAAとBBBを逆にセットしてみたのですが、やはりSelectedValueの方しか値が入っていません。 よろしくお願いします。
656 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:26:57 ] DataTable には値が入ってるの?
657 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:27:00 ] SelectedTextはコンボボックスのテキスト入力部の、コピーとかのために「選択」してる文字列だから
658 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:32:58 ] >>656 DataTableには値がちゃんと入っています。 デバッグでも確認しましたし、DataGridViewに突っ込んで確認しています。 >>657 そこは調べ不足でした。SelectedItemで確認するのが正しいですね。 最悪、ループでAddしていくしかないですかね…
659 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:37:50 ] もう少し、ちゃんとしたコード出してみ。 DataTable の指定とかおかしそうな気がする。
660 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:43:14 ] >>659 ソースが手元にないので、覚えている範囲で書きます。 Using ds As DataSet = (オラクルパッケージをFillメソッドで実行) Using dt As DataTable = ds.Tables(0) combo1.DataSource = dt ←このdtをDataGridViewに入れ、値が入っていることを確認 combo1.ValueMember = "AAA" combo1.DisplayMember = "BBB" End Using End Using こんな感じです。
661 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:48:35 ] Disposeしてどうするあほかよ
662 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:31:00 ] >>661 うわっ、すいません。初歩的な所で… なぜ、DataGridViewは表示されたままだったのでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:41:38 ] String.Formatの書式について教えて下さい。 String.Format("合 計 {0,12:\\###,###,##0}", dTotal) → 合 計 -\9,000 String.Format("合 計 \{0,12:###,###,##0}", dTotal) → 合 計 \ -9,000 String.Format("合 計 {0,12:\\-###,###,##0}", dTotal) → 合 計 -\-9,000 dTotalがマイナスの場合は-1をかけて、 String.Format("合 計 {0,12:\\-###,###,##0}", dTotal)とすれば 合 計 \-9,000になるのですが、それ以外の方法で 表示させるにはどうしたらいいでしょうか?
664 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:45:45 ] セクション区切り記号 ; を使えば正負でそれぞれに書式指定できる 使い方はカスタム数値書式指定文字列のページ見れ
665 名前:デフォルトの名無しさん [2009/07/30(木) 13:01:18 ] VBNETの入門書2冊読破したんだけどどうすればいい?
666 名前:663 mailto:sage [2009/07/30(木) 13:03:44 ] ありがとうございます。 おかげさまで出来ました! もっと勉強します。
667 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:53:02 ] 自動更新で下のやつがきたんだけど手動でダウンロードできないんでしょうか? できるのであれば方法を教えてください Visual Studio 2005 Service Pack 1 セキュリティ更新プログラム(KB971090)
668 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:00:15 ] KB番号ググりゃ見つかるだろ
669 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:08:44 ] >>667 それクソ時間かかるよな。SP1 のときも思ったけど。
670 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:51:40 ] なんか、やってることはほぼ再インストールと同じなんだそうだ。 だから、DLしてもどっちみち時間かかる
671 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:10:06 ] >>669 そうそう だから手動でダウンロードしたいわけなのよ
672 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:25:13 ] www.microsoft.com/downloads/details.aspx?familyid=7c8729dc-06a2-4538-a90d-ff9464dc0197&displaylang=ja 249MBワロタ
673 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:33:05 ] .NETからEXCEL使ってなんかやるとき、STAThreadじゃなくてMTAthreadだと、 なんか問題あったりするんでしょうか? EXCELのオブジェクトを作成したスレッド以外から使ったりはしない前提です。 なんかイマイチこの辺を理解してないんです。
674 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:49:22 ] >>672 ありがとうございます