[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/26 10:23 / Filesize : 199 KB / Number-of Response : 675
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

VB.NET質問スレ(Part30)



1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ]
前スレ

VB.NET質問スレ(Part29)
pc12.2ch.net/test/read.cgi/tech/1235206416/l50

テンプレは>>2

357 名前:デフォルトの名無しさん [2009/07/06(月) 01:28:08 ]
>>331ですが、データソースを見るとリレーションが効いて
親テーブルの下に子テーブルが見えてるんですが

こいつをDataGridViewの単一テーブル上に展開できません

tableA
fieldID
fieldA
tableB
fieldID
fieldB

fieldID fieldA fieldB のような表現をしたいのですが・・・やはり無理でしょうか?

358 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 02:13:56 ]
表示用に列一つ追加してExpression使うのが一番楽かな

359 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 02:24:49 ]
あ、DataColumn.Expressionな

360 名前:デフォルトの名無しさん [2009/07/06(月) 10:10:53 ]
>>358
やっぱりそうですか
誰かに言って貰わないと楽ちんな方法を知らずに回り道してるんじゃないかと心配で
先に進めないもので・・・

ありがとうございました

361 名前:デフォルトの名無しさん [2009/07/06(月) 11:56:20 ]
>>331
たびたびすみません。

datasetのデザイナで子テーブルにフィールドを追加しフィールドプロパティのExpressionに
TableA.FieldAを設定すると
リレーションシップ0が見あたりません
そこで
parent(リレーションシップ名).FiedlAを設定すると
リレーションシップ名が見あたりません

となります。datasetデザイナ上では確かにリレーションシップを設定してその名前をコピペしてるので間違いないと思うのですが

もしかしてコード上で設定しないといけないのでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:14:49 ]
Expression設定してるところでブレークポイント設定して確認すれ

363 名前:デフォルトの名無しさん [2009/07/06(月) 13:05:59 ]
>>362
datasetデザイナ上でプロパティを設定してるだけなので・・・・

よっぽどまぬけなことをやってるのかググっても該当するものは出てこず・・・

orz

364 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:19:17 ]
現在のプロジェクトをExpressionで検索してみろよ

365 名前:デフォルトの名無しさん [2009/07/06(月) 13:25:32 ]
>>364
やっと意味がわかりました。なるほど・・・

で、やっと設定できました

原因は不明ですが、ビルドしたら親テーブルのフィールドを認識するようになりました

お騒がせしました



366 名前:デフォルトの名無しさん [2009/07/06(月) 19:24:59 ]
すみません
VBからTwitterに文字列を投稿する方法はAPI以外にないでしょうか?

367 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:54:39 ]
これがWin32APIの事を指していたら、それはそれで面白いかもしれんね。

368 名前:デフォルトの名無しさん [2009/07/06(月) 21:55:30 ]
>>367
TwitterAPIの方です

369 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:15:26 ]
SerialPortにて0.1Sec毎に送受の通信を行っているプログラムなんですが
フォームに配置しているボタンを連打したり、データグリッドを更新させたりしてプログラムに一次的に負荷をかけると、その間だけ送受の通信が止まってしまいます。
ためしにForm2を作ってその別のフォームで単独で通信させていてもForm1にあるボタン等を連打して負荷をかけると同じような結果でした。

こういう問題はどういう風に解決したらよろしいのでしょうか?
どうかご助言のほうをよろしくお願いします。

370 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:35:11 ]
負荷とか関係なく、UIスレッドで通信しているのが原因の予感。
スレッドを分ければ一瞬で解決すると見た。

371 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:35:23 ]
別のスレッドで通信を処理すればいいんじゃね?

372 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:42:11 ]
UIスレッド?ですか
VB2008を使っているのですが、スレッドとはどういう事なのでしょうか?


373 名前:デフォルトの名無しさん [2009/07/06(月) 22:50:21 ]
マルチスレッドプログラミングってやつ
原則的に時間のかかる処理は別のスレッドを作ってそっちで動かさないとUIが固まります
特別な技術や注意が必要なのでしっかり勉強しましょう

374 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:51:31 ]
「ワーカースレッド」でMSDN を検索してこい。

375 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:58:14 ]

『.NETマルチスレッドプログラミング 1:スレッドの実行と同期』
codezine.jp/article/detail/144?p=1

『.NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール』
codezine.jp/article/detail/139?p=1



376 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 04:24:03 ]
ありがとうございます
参考にさせていただきます

なんとなくマルチスレッドの動きは分かったんですが
このプログラムは送信はタイマーイベントで行っていて、受信はCOMのDataRecivedイベントで行っているのですが
この場合、>>369のように停止させたくはないので両メソッドともマルチスレッド化したほうがよろしいんでしょうか?
なかなか複雑そうですね・・。

377 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 07:47:52 ]
どうせDataReceivedはSerialPortが用意したスレッド上になるのだから、
データを格納した上でControl.BeginInvokeしておけば、
UIスレッドが原因で邪魔されることは無いんじゃないかな。

378 名前:376 mailto:sage [2009/07/07(火) 19:14:09 ]
>>377
>データを格納した上でControl.BeginInvokeしておけば、
>UIスレッドが原因で邪魔されることは無いんじゃないかな。
すみません・・・もう少し詳しく説明していただけませんでしょうか?

それと思ったのですが
現状のプログラムがDaraRecivedイベントが発生してデータを受け取ったら、そのデータのヘッダ等を確認するためにDaraRecivedイベント内で処理関数(*1)を呼び出して、最終的に変数にデータを格納する処理にしています
そしてフォームに配置したタイマーイベントで、その格納した変数にアクセスしデータを読み取るようにしています。
DaraRecivedイベントから呼び出した上記の(*1)の処理関数もDataRecivedイベントと同じスレッド、つまりフォームが実行されているスレッドとは別で実行されているということなんですよね?

ということは、既に受信処理は別のスレッドで処理されていたということなんですよね
この場合、フォームに配置したタイマーイベントで行っている送信処理のみがフォームと同スレッドな為にフォーム操作時に停止していると判断して
結果的には送信処理のみを別スレッドにすれば問題は解決しそうですね

マルチスレッドについては教わった解説サイトを見て調べるとして
・・・タイマーイベント内の、送信処理を別スレッドにするべきなんでしょうか
それともこのタイマーイベント自体を別スレッドにしないといけないんでしょうか?
タイマーイベントはフォームを操作したとして途切れることはないのかな

379 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:34:19 ]
送信処理を別スレッドにしてみて、改善されるか試してみなよ。
今後のことを考えれば、スレッド使えないと自分が大変なんだからさ。


380 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:46:17 ]
System.Timers.Timerの方を使えば、
勝手に手持ちのスレッドプールからイベントを起こしてくれるから、
スレッドを一から作る必要は無いんじゃないかな。
UIスレッドとは無関係にイベントは発生するから、止まる事も無いはず。

381 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:00:04 ]
Oracleと繋ぐときにOracle Clientを使わない方法って無いんですか?

382 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:02:18 ]
ODP.NETでもODBCでも

383 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:19:17 ]
>>382
ODP.NETやODBCだと、exeの配布先のマシンに
オラクルのクライアントがインストールされていなくても
SQLの実行などができますか?

384 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:25:49 ]
まさか

質問はちゃんと要件をまとめてからしてくれよ

385 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:31:15 ]
>>384
じゃ、exeの配布先のマシンには
Oracleのクライアントソフト(.Net)は必須なんですね?



386 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:34:17 ]
そもそも今現在受信処理と送信処理はちゃんと(うまく)同期とって動いてるの?


387 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:36:04 ]
Oracleのインストールは必須
.NETからOracleへのアクセスはSystem.Data.OracleClientやSystem.Data.Odbcなら標準ライブラリに用意されてる
> Oracleのクライアントソフト(.Net)
って何指してるの?

388 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:36:30 ]
Oracleのクライアントソフト(.Net)ってなんだよ。
Oracleのネイティブなクライアント(OCIとか)と
.NETのプロバイダは別物だぞ。

さらにDataDirectなどの、Oracleのネイティブなクライアントが
不要なプロバイダもあることはある。


389 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:39:23 ]
ありがとうございます。
納得しました。

390 名前:デフォルトの名無しさん [2009/07/08(水) 16:42:49 ]
VB2005でアプリを開発しています。
あるファイルが他のなんらかのアプリケーションで既に開かれているかどうかを調べるにはどうすれば良いでしょうか?
ファイル名から、そのファイルを開いているアプリケーションが何なのかを知りたいのです。

開発しているアプリからデータを既存のファイルに上書きでエクスポートしようとした時、
他のアプリでそのファイルが開かれていればエラーになってしまうので、どのアプリがその
ファイルを開いているかをユーザに通知したいのです。

どうぞよろしくお願いいたします。

391 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 16:49:29 ]
無理じゃないかな、ハンドルの継承とかあるし

392 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 17:01:02 ]
なんかAPIができたときいたことがある

393 名前:390 mailto:sage [2009/07/08(水) 17:28:25 ]
>>391
>>392
レスありがとうございます。

とりあえず現時点では「ファイルが他のアプリケーションで使用されていないことを確認してください。」と
メッセージボックスを表示しています。

たとえば、開発しているアプリから xls ファイルでエクスポートしてそのファイルが Excel で開かれていれば
ユーザは Excel というアプリを自分で確認してくれるのですが、別のアプリでその xls ファイルを読み込んで
いる場合、ユーザはその xls ファイルが開かれているということに気づきにくいみたいですので、どのアプリが
その xls ファイルを開いているのか通知したいんです...

openfiles というコマンドがあるみたいですが、これは非公開APIを使用しているかも...みたいな記述は
見かけました。
ただこのコマンドを使用するにはシステムのパフォーマンスが低下する可能性があるとの事(openfiles.exe が
ファイルのトレースを行うのでオーバーヘッドが発生)で、このコマンドを使用するには抵抗があります。
ttp://www.atmarkit.co.jp/fwin2ktips/306openfiles/openfiles.html

何か妙案はないかな...

394 名前:デフォルトの名無しさん [2009/07/08(水) 19:55:41 ]
使い終わったらOFFにすればいいんだろ

395 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 20:47:51 ]
>>393
technet.microsoft.com/ja-jp/sysinternals/bb896656(en-us).aspx

これはだめ?



396 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 20:51:10 ]
VB2008を使用しています。
Form1とForm2を作成し、Form1からForm2を以下のようにして表示させました。

[Class Main]
Public Sub Main()
Application.Run(New Form1)
End Sub

[Class Form1]
Private Sub Form1_Load( 略 )
Form2.Show()
End Sub

Public Sub SetTextBox( str )
TextBox1.Text = str
End Sub

[Class Form2]
Private Sub Button1_Click( 略 )
Form1.SetTextBox("test")
End Sub

このとき、Form2のボタンからForm1のTextBoxに文字列をセットできないのは
Application.RunでNewしているForm1にアクセス出来ていないからでしょうか?

397 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 20:56:46 ]
>>393
自分が開いてるかどうかなら
COM経由で開いてる文書一覧が取得できなかったっけ?

他PCが開いているかどうかなら
開かれていたらどうしたいのかによるんじゃね?
そもそもExcelが排他かけないんだし…


398 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:05:21 ]
>>396
よくわからんけど
Form1.TextBox.Text = "test"
は、ダメなの?

399 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:09:43 ]
>>396
VBは過去のしがらみにより、フォームのインスタンスを生成しなくても
フォームにアクセスできる。
この場合のフォームのインスタンスは、既定のインスタンスとか呼ばれてる
>Application.RunでNewしているForm1にアクセス出来ていないからでしょうか
その通り。Newすると、既定のインスタンスじゃないインスタンスが生成されてる
Form2が呼んでるForm1はインスタンス指定がないから既定のインスタンスのForm1
Application.Run(Form1)で既定のインスタンスのForm1を表示させれば思った通りの動作



400 名前:デフォルトの名無しさん [2009/07/08(水) 22:18:24 ]
過去のしがらみというか、オブジェクト指向がわからない人のためにVB2005になってわざわざ導入されたんだよ
VBユーザーは怒るべき

401 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:07:02 ]
>>396
2008は持っていないのですが、VB2005で実験してみたところ、普通に書き込みされました。

Public Class Main
  Public Form1 as new Form1
  Public Sub Main()
    Application.Run(Form1)
  End Sub
End Class
ってやってもダメだろうか。

実験その1
Public Class Main
  Public MyForm1 as new Form1
  Public Sub Main()
    Application.Run(MyForm1)
  End Sub
End Class

Public Class Form2
  Private Sub Button1_Click(略
    Form1.SetTextBox("test")
  End Sub
End Class

Form1は一緒ね。結果は、正常に?書き込み動作された。
MyForm1っていうForm1のインスタンスが、Form1って名前でアクセスできるみたい。
仕様としては嫌だなぁ。
続きます・・・




402 名前:401 mailto:sage [2009/07/09(木) 00:15:44 ]
実験その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.SetTextBox("test")
  End Sub
End Class

Form1は例によって一緒。
結果は、書き込みされず。
見えないMyForm2にアクセスしている模様。
ちなみにこの後
MyForm2.Show
とすると、書き込み済みで表示される。
これはまぁ普通。
もう少し続きます・・・

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をいじっても出てきません。
どのようにすればいいでしょうか。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef