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


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

VB.NET質問スレ (Part6)



1 名前:デフォルトの名無しさん [04/07/03 08:49]
VB.NETの質問全般です

過去スレ
VB.NET質問スレ (Part5)
pc5.2ch.net/test/read.cgi/tech/1078134703/
VB.NET質問スレ (Part4)
pc2.2ch.net/test/read.cgi/tech/1065269043/
【老若】VB.net質問スレ【男女】 (Part3)
pc2.2ch.net/test/read.cgi/tech/1056281084/
【老若】VB.net質問スレ【男女】 (Part2)
pc2.2ch.net/tech/kako/1043/10436/1043629429.html
【老若】VB.net質問スレ【男女】
pc2.2ch.net/tech/kako/1025/10258/1025848458.html


516 名前:デフォルトの名無しさん mailto:sage [04/08/15 00:24]
質問なのですが、下のリンク先にある、Visual Basic .NET 2003というものは、Visual Studioを使った時のようなエディタがついているのでしょうか?


ttp://www.microsoft.com/japan/msdn/vbasic/productinfo/default.asp

兄が、仕事で使っているというVB.NETでは、関数の名前を入力した後、ピリオドをうつと各プロパティとか命令が表示されて、かつそれぞれのヘルプまで表示されると聞いたのですが、その機能がほしいのです。

517 名前:デフォルトの名無しさん mailto:sage [04/08/15 00:37]
>>514
それは君が無知で無恥だから。ユーザーコントロールって概念が理解できてないんだろ。
知らないなら黙ってろよ。
何をやりたいかは>>513の文章で理解可能。俺は解決法は知らないけど。

ま、でもデザインモードでの変更がコードに反映されてないだけだろうから
そんなに難しい問題じゃない気がするけど。
.NETではVB6みたいにウィザードがコード書いてくれないのか?

518 名前:デフォルトの名無しさん mailto:sage [04/08/15 00:55]
>>517
うーむ、俺が無知なら正直すまんかったんだが…
見たところユーザコントロールに既に貼り付けてあるボタンのインスタンスを
プロパティで入れ替えようとしてるんだよね?

ってかいてて今やりたいことが多分分かった…
普通その場合は、プロパティを読込専用にするだろ?
入れ替えできるようなプロパティを書いてるから勘違いしてたよ。

519 名前:デフォルトの名無しさん mailto:sage [04/08/15 00:57]
あと、VB.NETで貼り付けたコントロールの実体はプロパティなので、
普通はメンバをPublicにするだけでOK。
まあ、新たに追加してもいいことはいいんだけど…

520 名前:デフォルトの名無しさん mailto:sage [04/08/15 01:00]
って何度もすまん、これじゃデザイナでできないって言ってるのか…
まえに同じような事して単純に出来たような気がするんだけど…未確認。

生成されたコード上でのプロパティの設定順かな…?

521 名前:デフォルトの名無しさん mailto:sage [04/08/15 01:15]
>>516
「VB.NET単体でVS.NETと同じようなテキストエディタが用意されているのか?」
と言う質問ですか?
それなら答えはYesです


522 名前:デフォルトの名無しさん mailto:sage [04/08/15 01:29]
>>517
俺には>>513の意味はぱっと見て分からなかった。
誤解を招く表現がいくつかあるから、意味を取れなくても無知かどうかは分からんのじゃないの?
逆にやりたいことと>>513の書き込みを見て違和感も感じないなら、その方が無知の可能性あり。


523 名前:513 [04/08/15 10:12]
すみません。難解な文章を書いてしまって・・・もう一度、書いてみますと
UserControl上にButton1を追加します。そして、Button1をデザイン上で設定出来るようにする為にプロパティを追加しました。(UserControlのコードを下記に記載)
そして、ビルドを行いUserControl1.dllを生成し、Windowsアプリケーションの別プロジェクトを立ち上げ、アイテムの追加と削除より、UserControl1.dllを追加します。
Form上にUserControl1を貼り付け、プロパティを見ると、tButtonが出来ています。
そのtButtonプロパティの値を変更(Textに"hoge"をセットする)とデザイン上では、Button1の表示が"hoge"となります。
この状態で、実行してみると、Textに"hoge"とセットしていたはずなのに、"hoge"と表示されず"Button1"と表示されます。
このように、プロパティで設定した値が、実行時には全く反映されません。
どのようにすれば良いのでしょうか?

>>519
Button1をPublicに変更して行って見ましたが、プロパティで設定した値は、デザイン上では
変わっているのですが、実行時には反映されませんでした。

Public Class UserControl1
Inherits System.Windows.Forms.UserControl

#Region " Windows フォーム デザイナで生成されたコード "

<System.ComponentModel.Browsable(True) _
, System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)> _
Public Property tButton() As Button
Get
Return Me.Button1
End Get
Set(ByVal Value As Button)
Me.Button1 = Value
End Set
End Property
End Class

524 名前:516 mailto:sage [04/08/15 12:51]
>>521
ありがとうございます。



525 名前:デフォルトの名無しさん mailto:sage [04/08/15 13:10]
>>523
デザイナで生成されたコード内に、プロパティの変更コードは出てる?


526 名前:デフォルトの名無しさん mailto:sage [04/08/15 15:33]
エクスプローラの詳細表示のような、横に複数項目表示できるリストボックスって
VB.NET標準コントロールには無いの?

527 名前:526 mailto:sage [04/08/15 15:46]
悪い。自己解決した。ListViewだったね

528 名前:デフォルトの名無しさん [04/08/15 22:31]
test

529 名前:デフォルトの名無しさん mailto:sage [04/08/16 09:04]
>513
どっかで見た質問だなぁ。
どこで見たんだろ……まぁいいや。

そんときは
>#Region " Windows フォーム デザイナで生成されたコード "
この中で初期化してた、ってオチだったよ。

530 名前:デフォルトの名無しさん mailto:sage [04/08/16 09:35]
>>513
そもそも、Button1のプロパティを全て公開する必要があるの?

ユーザーコントロールにカプセル化するんだから、
必要なプロパティのみを公開すべきじゃない?

Public Property ButtonText() As String
  Get
    Return Button1.Text
  End Get
  Set(ByVal Value As String)
    Button1.Text = Value
  End Set
End Property

他にも必要なら、
ButtonBackColor とか、
ButtonFont という風に追加すればいいのでは?

531 名前:MSサンプルにバグ? [04/08/16 09:48]
ja.gotdotnet.com/quickstart/howto/doc/Remoting/mainfeatures.aspx
リモート処理の概要 参照によってオブジェクトを渡すのサンプルを実行すると、
セキュリティ制限のため、型 System.Runtime.Remoting.ObjRef にアクセスできません。
というエラーがでます。
クライアント、リモート オブジェクト、およびリモート ホスト アセンブリを異なるディレクトリに置いてサンプル実行しています。
対策ご存知の方、教えてください。

532 名前:自己解決 [04/08/16 18:43]
>>531自己解決。お騒がせ↓
www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconautomaticdeserializationinnetremoting.asp

533 名前:513 [04/08/16 23:08]
>>529
確かに
#Region " Windows フォーム デザイナで生成されたコード "
の中は、デフォルトのままです。具体的には、どのように修正すれば宜しいのでしょうか?

>>530
確かに、通常は必要と思われるプロパティのみ公開するのですが、
ボタンコントロールなどは、予めどれが必要と言われると、ほぼ全部使う可能性があると思われます。
その場合、数十にもなるプロパティを記述していくのは・・・という事と、
勉強も兼ねて、コントロール自体のプロパティを全て公開するにはどうするのだろうと、疑問に思い
質問した次第です。


534 名前:473 mailto:sage [04/08/17 14:52]
483さんの方法でやってみたらうまく行きました。ありがとうございます。



535 名前:デフォルトの名無しさん [04/08/19 17:03]
APIを使いたいんですが
関数の形は
void __stdcall fncSub(struct Info *p);
って形になっていて
Public Declare Sub fncSub Lib "HOGE.DLL" (ByRef p As Info)
という風に宣言して
fncSub(p)
というように呼び出したんですが、
「'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。」

て出るんです。
どのようにすれば正しく呼び出せるのでしょうか。
よろしくお願いします。

536 名前:デフォルトの名無しさん [04/08/19 17:28]
ぬるり

537 名前:デフォルトの名無しさん [04/08/19 17:39]
データアダプタで質問させてください。

まず前作業としてMDBでテーブル2つとビュー1つを作成します。

TABLE1
  ID,FIELD_1,FIELD_2 (キーはID)

TABLE2
  ID,FIELD_A,FIELD_B (キーはID)

VIEW1
  ID,FIELD_1,FIELD_2,FIELD_A,FIELD_B


さて、ここでVB.NETからVIEW1のデータアダプタを作りたいのですが、
構成ウィザードで警告が出てしまい、UPDATEとDELETEについてコマンドが作成されません。
アダプタ自体は作成できるのですが、削除が実行できないのです。
どうしたらいいんでしょうか・・・

TABLE1とTABLE2の2つアダプタを作って、それぞれに削除かけないとだめなのかしら・・・
VIEWで一発ですませたいんですが・・・

538 名前:デフォルトの名無しさん [04/08/19 17:49]
あ、警告はちなみに一意に識別する列を作成できませんでした、とかいうやつです。
キーがあるから一意のはずだし、Accessからは削除できるのに・・・なぜ・・・

539 名前:デフォルトの名無しさん mailto:sage [04/08/19 20:23]
>537-538
DBは何を使ってるんだよ。
DBから主キーを取得できてないって事。

540 名前:デフォルトの名無しさん mailto:sage [04/08/19 22:10]
>>536
ガッ

541 名前:535 mailto:sage [04/08/19 22:37]
535です。
どうやらAPIのほうが悪かったようで
void __stdcall fncSub(struct Info *p); は
extern "C" HOGE_API void __stdcall fncSub(struct Info *p);
という風にするのを忘れていたようです。

それで、後者のほうにDLLを修正したところ、今度は
「'System.ExecutionEngineException' のハンドルされていない例外が
mscorlib.dll で発生しました。」
というエラーが発生しました。
これはどういうエラーなんでしょうか。
ググったりMSDNで調べたりしましたがいまいちわかりません。
分かる人がいましたら解決方法を教えてください。
よろしくお願いします。


542 名前:デフォルトの名無しさん mailto:sage [04/08/19 23:32]
そのAPIって参照設定で読み込めたりしないのかと横着を考える

543 名前:541 mailto:age [04/08/20 00:50]
>>541
参照設定をしようとしたら「有効なDLLじゃない」とエラーが出て
設定できませんでした。

ところで、使っている構造体の形は

struct Info{
char A[10][1024];
char B[10][512];
char C[10][512];
};

って形になっているんですけど、VBでこの構造体を宣言するには

Public Structure Info
Dim A() As String
Dim B() As String
Dim C() As String
End Structure

でいいんでしょうか?教えてください。お願いします。

544 名前:デフォルトの名無しさん mailto:sage [04/08/20 08:15]
>>543
だめ。構造体の宣言で、マーシャリングをきっちり指定する必要あり。
結構面倒だよ。



545 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:04]
.netであるクラスのプロパティを動的に参照するため

wk1 = ClassA.PropA
wk2 = ClassA.PropB



wk1 = ClassA.xxxx("PropA")
wk1 = ClassA.xxxx("PropB")

のような感じにしたいのですが
どのようにコーディングすればよいでしょう???

VB6時代だとProperties("PropA")のようなことができた気が…

546 名前:デフォルトの名無しさん mailto:sage [04/08/20 18:50]
VB よくわかんないけど、例えばクラス ClassA の静的プロパティの場合
val = typeof(ClassA).GetProperty("PropA").GetValue(Nothing, Nothing)

インスタンス a のプロパティの場合
val = GetType(a).GetProperty("PropA").GetValue(a, Nothing)

とかかなあ・・・ Object が帰ってくるから、型変換は必要。
あとプロパティの一覧を得たいなら、System.Type.GetProperties メソッドが使えます。

547 名前:546 mailto:sage [04/08/20 18:50]
>>546
スマソ。typeof は C# か。

548 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:55]
>>546-547
>GetType(a).GetProperty("PropA").GetValue(a, Nothing)

書き込み後なんとかGetType(a).GetProperty("PropA")のプロパティ情報列挙までは自己解決していましたが
GetValue()の配列indexの使用法を間違ってました。

配列要素でないときはNothingなのかー!

激さんくすです!!

549 名前:デフォルトの名無しさん mailto:sage [04/08/21 17:42]
データーグリッドを使って、データーを表示させた際に、グリッド右端をクリックすると
幅が自動で広がりますが、あれをプログラムでやらせることは出来るでしょうか?

550 名前:デフォルトの名無しさん [04/08/21 19:09]
MSDEとVBの組み合わせで、"display_order"をintに設定して

SqlDataAdapter1.SelectCommand.CommandText = "SELECT * FROM pc_data ORDER BY display_order "

とやると数値が大きなものが上にきてソートされます。

SqlDataAdapter1.SelectCommand.CommandText = "SELECT * FROM pc_data ORDER BY display_order DESC"

とやれば、小さい順にソートされるかな・・・とやってみたのですが、うまく動きません。何が間違っているのでしょうか?

551 名前:デフォルトの名無しさん mailto:sage [04/08/21 20:17]
どうでもいいけど昇順と降順間違ってないか?


552 名前:デフォルトの名無しさん mailto:sage [04/08/21 22:05]
いろいろ

553 名前:デフォルトの名無しさん mailto:sage [04/08/21 22:51]
まだVB.NET初めて間もないのですが
以下のようなコードで「オブジェクト参照のインスタンスがありません」
とエラーが出てしまいます。

dim wrk_item() as string

wrk_item(0) = "テキスト"  ←ここでエラーが起こってます
wrk_item(1) = "テスト"

エラーの原因がわかりません。配列の要素数はあらかじめ決めておかないと
だめなのでしょうか・・・

554 名前:デフォルトの名無しさん mailto:sage [04/08/21 23:17]
dim wrk_item() as string = { "","" }





555 名前:デフォルトの名無しさん mailto:sage [04/08/21 23:19]
「配列を参照する事のできる」変数を定義しただけで、
「配列自体を作成」していない。変数の初期もしていない。
よって「配列を参照する事のできる」変数はNothingのままだから以下省略

556 名前:デフォルトの名無しさん mailto:sage [04/08/21 23:20]
>>554
ありがとうございます
やはり配列要素を決めておかないとだめみたいですね

557 名前:デフォルトの名無しさん mailto:sage [04/08/21 23:22]
>>555
なるほど、そういうことでしたか・・・


558 名前:デフォルトの名無しさん mailto:sage [04/08/21 23:33]
>553
ArrayListとかReDimとか使えば?

559 名前:デフォルトの名無しさん mailto:sage [04/08/22 10:21]
ボクのPCはDELLのディメンションですがVB.NETをうごかしてもこわれないでしょうか?

560 名前:デフォルトの名無しさん mailto:sage [04/08/22 10:24]
残念ながらどこのPCでも壊れるときは壊れます。

561 名前:デフォルトの名無しさん mailto:sage [04/08/22 14:15]
まあ、基本的にはArrayListあたり使うのが常套かな。


562 名前:デフォルトの名無しさん [04/08/22 18:56]
>>559
VisualStudio.net入れると壊れる可能性が高いですね。

563 名前:デフォルトの名無しさん [04/08/23 09:19]
>>550
ここは初心者の来る場所じゃありませんYOwwwwwwwwwwwwwwwwwwwwwwwww

564 名前:デフォルトの名無しさん mailto:sage [04/08/23 12:35]
かといって高度な問題には解答が出来なかったりする



565 名前:デフォルトの名無しさん mailto:sage [04/08/23 13:57]
変数のタイプっの取得なんですが・・・

dim val
dim s as String = ""

val = s.GetTypeCode
なら結果 String ですが


dim val
dim s as String

val = s.GetTypeCode

で初期化していないと当然 sは生成されていないので.GetTypeCodeが取れません。

初期化されてない変数タイプ取得ってどう記述しますか?

566 名前:565 mailto:sage [04/08/23 14:02]
あ、ちなみに上記で

GetTypeCode(s)

で Object が返るのですが Dimで定義されている String を返したいのです・・・

567 名前:デフォルトの名無しさん [04/08/23 16:17]
>>550
どう動かないのかというのが良くわからないが、データーグリッドの表示順を変えたいだけなら

データセット名.Clear()
SqlDataAdapter1.SelectCommand.CommandText = "SELECT * FROM pc_data ORDER BY display_order"
SqlDataAdapter1.Fill(データセット名, "car_data")

としてやるだけでいけると桃割れ。

568 名前:デフォルトの名無しさん [04/08/23 16:34]
って"car_data"ってなんだよ"pc_data"ねw。

ところで、ここの上のほうにあるデータグリッドの幅をデーターの長さに自動であわせて表示するっていうの
を、どなたか出来る方いませんか?



569 名前:546 mailto:sage [04/08/23 16:44]
>>565-566
無理。そもそも String が帰る時だって、値の型を取得しているだけで
"変数" のタイプを取っているわけじゃないし。

570 名前:デフォルトの名無しさん mailto:sage [04/08/23 21:02]
>>569
よくわからんが無理ってことはないんじゃないか?
むしろインスタンスからしか型に関する情報を取れないなんてライブラリの方が
不条理な気がする。

www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vaoprgettype.asp

www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemtypeclassgettypecodetopic.asp
の組み合わせでいけるんじゃないだろうか。

571 名前:546 mailto:sage [04/08/23 23:56]
>>570
 レスされたので答えるけど、その手のメソッドでは無理。
IL にコンパイルされた後はそもそもローカル変数なんて
タイプ情報にも存在しなくなっちゃうんで、
「ローカル変数が何型で宣言されたか」ってな情報を得るには、
ライブラリではなく言語自体によるサポートが必要。

値型 (value types - 単純型や structure) のものなら、
変数宣言と同時にインスタンスが作成されるので大丈夫だけど(と思う)

572 名前:デフォルトの名無しさん mailto:sage [04/08/24 00:37]
>>565
ちなみになんでそんなことがしたいわけ?
>>571も言ってるけど、ライブラリじゃなくて言語仕様で
そういう機能があるかどうかの問題になるね。

573 名前:565-566 mailto:sage [04/08/24 00:55]
>>569

>値の型を取得しているだけで
>"変数" のタイプを取っているわけじゃないし。
私も同様の認識だったのですがデバッグ中に…

Dim s As String

直後のステップをブレーク、イミディエイトにて

?type.GetTypeCode(s) 

と実行した際、

「型 'String' の値を 'System.Type' に変換できません。」
といったメッセージが出たもので…

「あれ?エラーだけどここで'String'と認識するってことは…なにかしらの記述で変数のタイプも取得できるのか???」と…


574 名前:デフォルトの名無しさん mailto:sage [04/08/24 11:51]
Form1で
    Dim f2 As Form2
    f2.show()

のようにしてForm2を表示して、そのForm2からForm1のTextbox1の内容を操作するにはどうしたらいいんですか?
Form1からForm2の操作はできるんですが・・・その逆を行おうとするとエラーがでます。



575 名前:デフォルトの名無しさん mailto:sage [04/08/24 12:31]
またVB6から進化できてない人間が迷い込んだな。。

576 名前:デフォルトの名無しさん [04/08/24 12:39]
だから旧VBスレも合わせて、スレの>>1のテンプレに愚問集作ってそこに

 『別フォームの……』

を入れとくべきだろう。

577 名前:デフォルトの名無しさん [04/08/24 12:39]
ここは初心者の来る場所じゃありませんYOwwwwwwwwwwwwwwwwwwwwwwwww

578 名前:デフォルトの名無しさん mailto:sage [04/08/24 12:50]
そして、煽りも要りませんので・・・

とりあえず過去ログ読みまっしょ

579 名前:デフォルトの名無しさん [04/08/24 13:23]
>>577
すいません
初心者はどこへ行けばよいですか?

580 名前:デフォルトの名無しさん mailto:sage [04/08/24 14:15]
>>579
ここは2ちゃん。「うるせー馬鹿」が返しの挨拶。

581 名前:デフォルトの名無しさん mailto:sage [04/08/24 14:51]
あの〜
いつぞやに、.NETの板が出来たと思っていたのですが、
あれは夢だったのでしょうか?

582 名前:デフォルトの名無しさん mailto:sage [04/08/24 15:55]
>>581
( ゚Д゚)氏ね

583 名前:デフォルトの名無しさん mailto:sage [04/08/24 19:46]
>>581
>>224のことか?

584 名前:デフォルトの名無しさん mailto:sage [04/08/24 21:39]
>>577
初心者の来る掲示板だと思います。ぼくはね。

で、>>574 みたいなのは、ハンドル渡すとか、
Form1 のほうで面倒見てあげるとかして実現は可能だと思う。

いまだによくわからないのだけど、答えはどっちなん?
「コードを工夫して実現する」 or
 「かっこ悪いからやってはいけない」



585 名前:デフォルトの名無しさん mailto:sage [04/08/24 21:51]
>>574
解1. Form2 のプロパティにForm1 のインスタンスをセットしておいてForm2 の方からはそれを介して使う。
解2. アプリケーション実行中にForm1 のインスタンスが高々1個しか無いことが確かなら、Form1 クラスに
     静的プロパティとして Form1 のインスタンスを保持して、Form1.ActiveForm のようにしていろんな所から使う。

586 名前:513 [04/08/24 22:32]
誰か解を求む・・・_| ̄|○

587 名前:デフォルトの名無しさん mailto:sage [04/08/24 22:35]
>>586
問題のソース圧縮してどっかにうpすれば?

588 名前:デフォルトの名無しさん mailto:sage [04/08/24 22:47]
>>585
例外的な場合を除けば、どっちも不正解だと思う。
そんなことをすればデータ隠蔽の効用が全部失われてしまう。

実際にデータを持つオブジェクトからハリボテ君(Form1)に
イベントで通知するのが正解だろう。

589 名前:デフォルトの名無しさん mailto:sage [04/08/24 23:14]
>そんなことをすればデータ隠蔽の効用が全部失われてしまう。
その判断の根拠を教えてくれ。
って>>584の言ってる事の方が普通じゃないと思うが…

590 名前:デフォルトの名無しさん [04/08/24 23:40]
ヴァカ降臨!
www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14151&forum=3


591 名前:駆け出し mailto:sage [04/08/24 23:49]
ちょっと気持ちの悪いエラーが出ているので質問です。

Button1 と TextBox1を配したForm1のButton1のクリックイベントで

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim parameter As Integer
  Do While ( 処理続行条件 = True )
  Application.DoEvents()
  parameter = CInt(TextBox1.Text)
          ・・・                    'parameter を使った処理
Loop
End Sub

というように、TextBox1からパラメータを入力してループ処理に反映させるコードを書き、
デバッグモードでビルドエラーも出ずに一見正常に動作する所まできました。
ところがDo While ループが回っている最中にForm1の右上の「X」ボタンをクリックして強制終了させると、
parameter = CInt(TextBox1.Text) の行のところで

'System.InvalidCastException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。
追加情報 : 文字列 "" から型 'Integer' へのキャストが有効ではありません。

とエラーが出てしまいます。
なにぶんど素人なもので、どうしてエラーが出てるか良く分からないし、分からないと気持ち悪くて使えないし・・・
どなたか、エラーが出ている原因をご教授願えないでしょうか


592 名前:デフォルトの名無しさん mailto:sage [04/08/24 23:59]
TextBox1.Textが""なんじゃないの?

593 名前:駆け出し mailto:sage [04/08/25 00:06]
>>592
TextBox1の中身は(目で見る限り)整数が入っています。
実際、ループ中の強制終了さえしなければ妥当な結果が得られています。

アプリケーションの終了でTextBox1の中身がクリアされてしまう、と言われれば
なんとなくそうかなあとは思うのですが、
素人考えでは、「X」ボタンのクリックが処理されるのは ”Application.DoEvents()”
のところであって、だとするとわざわざその次の行まで処理が進んでエラーが出るのも
おかしいんじゃないかと思ったり、悶々と悩んでいる次第です。



594 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:31]
うーん、細かい内部動作までは知らないんだけどさ…
Application.DoEvents()でフォームが閉じるわな。
閉じ終わったら処理が戻ってくるわな。
Windowの破棄とかが具体的にどのタイミングなのかは知らないけど、
この時点でTextBoxが空になってるというのはありえそうな話だ。
まあ、ObjectDisposedExceptionになりそうな気もするけどそこはそれ。

勘違いしてそうだが、×ボタンクリック=アプリケーションその場で強制終了じゃないぞ。
ちゃんと最後まで処理は続く。



595 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:34]
DoeventsだからこそForm Unloadとその他のプログラムの動作がマルチタスクで動く。
ところでDoevents中に×ボタンを押したときにちゃんと終了するプログラムを書けるかどうか見守ってやる

596 名前:592 mailto:sage [04/08/25 00:37]
書こうと思ったら>>594氏が書いてくれたか
Application.DoEvents()で閉じる処理を拾った後(フォームが破棄されてる)に
parameter = CInt(TextBox1.Text)を実行してるから空っぽ
DoEventsはどの順序でイベントが発生したか追跡が難しいから
あまり使うことはおすすめできない

597 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:38]
>>589
>>584が正しいなんて全く言ってないけど。。

「データ隠蔽の効用が失われる」は正しい言い回しじゃないが、
要するに>>585のようにしたのでは、たとえばフォームならフォーム上のコントロールの
制御の責任者とそのタイミングの明確さが失われるってことだ。

テレビに例えれば、ケーブルで繋がってるのなら映像がどっから流れてきているかは
ケーブルを追っていけば自明だが、「パブリックな」電波だったら映像がどっから来ているか
追跡するのは大変だよ。

よく知ったかクン(俺もその一人だが。。)が「UIとロジックを分離する」
なんて知った風なこといってるでしょ?要するにそれだよ。

598 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:41]
ちゃんとフラグ管理やらEnable False やら工夫すればDoevents使いまくりでとても軽くて快適なアプリができるぞ

599 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:52]
スレッド使えるようになったのにわざわざDoEventsなんていう
面倒で危ない橋を渡る理由が浮かばない。

マルチスレッドがよほど難しいならともかく、
直接UIいじらない単純なバックグラウンド処理なら屁みたいなもんなのに。


600 名前:駆け出し mailto:sage [04/08/25 00:54]
レスくれたみなさん、ありがとうございます。
どうも Application DoEvents() の処理のタイミングについて誤解があったようですね。
ちょっくら関連ドキュメントなぞ当たって勉強してみます。

VBは奥が深いと言うか何と言うか、やればやるほど
過去に書いた見掛けだけ正常に動くコードのインチキさ加減が露になってくる・・・

601 名前:デフォルトの名無しさん mailto:sage [04/08/25 01:02]
まあ、EnabledをFalseにするとかでもはや別スレッドでやるのと
同じくらい流れが明確なのであれば、そんなに危険があるわけではないが、
>>599の言ってるとおり、それがスレッドでやるより特別に簡単てわけじゃない。
単発処理自体が重かったり、常にDoEventsを行う事を考えるくらいなら、
むしろ別スレッドの方が簡単確実だ。

602 名前:デフォルトの名無しさん mailto:sage [04/08/25 07:45]
どんな.NETアプリでもあちこちにDoevents挿入しとかないと他のアプリが重くなっちゃうというのが.NETアプリを使ってるときの体験法則

VB.NETアプリが動作中にタスクバーにある他のアプリをクリックしてアクティブにするときに重さを感じる

603 名前:デフォルトの名無しさん mailto:sage [04/08/25 08:14]
>>602
DoEventsの意味がわかってない予感。。
ついでにプリエンプティブって意味もわかってない予感。。

しかし、これをプログラマの世界もオーディオみたいにプラシーボに
騙される人が出るほどレベルが低下していると見るべきか、それだけ
層があつくなったと見るべきか。

604 名前:デフォルトの名無しさん mailto:sage [04/08/25 09:03]
>586
VB6の時はPropertyBagオブジェクト使ってたが、.NETだと違うみたいだ。
MSDNでPropertyBag調べて見れ。
.NETではどうすればいいかわかる。



605 名前:774.sln [04/08/25 10:14]
質問です。
Windows2000で組んだアプリケーションが、Windows2000では起動するんですが
WindowsMeで起動しないんです。
デバッガで調べたら
「アセンブリファイル Microsoft.VisualBasic.Compatibility が見つかりません」
と出ているんですが、これはどういうことなんでしょうか?

環境は
Windows2000 / Microsoft .net Framework v1.1
WindowsMe / Microsoft .net Framework v1.1

です。よろしくお願いします。

606 名前:774.sln mailto:sage [04/08/25 11:03]
すみません解決しました。
WindowsMeには「Microsoft.VisualBasic.Compatibility」がインストールされないらしく
「参照設定」で「ローカルコピー」をTrueにしたら起動しました。

スレ汚しすみませんでした。

607 名前:デフォルトの名無しさん mailto:sage [04/08/25 13:37]
>>602
( ゚Д゚)ポカーン

608 名前:デフォルトの名無しさん mailto:sage [04/08/25 15:54]
すいません。わたしマイクロソフトの社員ですが実は602の言うとおりです・・・

609 名前:デフォルトの名無しさん mailto:sage [04/08/25 17:23]
プロパティウインドウでGUI入力できるプロパティはどのように作成したらよいのでしょう?
たとえばBackColorのプロパティ等のような
プロパティ値の▼押下でプロパティ設定用の画面から入力できるようなものを作成したいのですが・・・

610 名前:デフォルトの名無しさん [04/08/25 17:50]
VB.NETでCORBAって使えますか?

611 名前:デフォルトの名無しさん [04/08/25 17:50]
とりあえず練習用にVisualBasic.netを買ってみたんですが、DB400に接続しようとしてODBC接続
接続しようとすると、このバージョンのVSでは無理だよヴォケ!ってウィザードの最中にいわれてしま
います。

普通のVisualStudio.netなら大丈夫なのでしょうか?それとも、エンタープライズ版を買わないとダメな
のでしょうか?



612 名前:デフォルトの名無しさん mailto:sage [04/08/25 18:05]
>>608
そこらにDoeventsを入れないといけないプログラム記述は
マイクロソフトで推奨されてるのですか?

613 名前:デフォルトの名無しさん mailto:sage [04/08/25 18:10]
.NETの実行速度を上げるために
1行のステートメントが終ったらすぐに次の行のステートメントを実行する仕様になってます。
そのためたとえループでなくてもマルチタスクさせたい場合(たとえネットするぐらいでも)は制御のあそび(すきま)を作ってほしいです。
Doeventsを使ってないプログラムのマルチスレッドは余計負荷になります。
公では言ってませんが感のいい方は気づいていたみたいです。

614 名前:デフォルトの名無しさん mailto:sage [04/08/25 18:19]
>>612
 このスレで書かれてる Doevents 推奨はほぼデタラメですが、
RPC や Out of Process COM オブジェクトの呼び出し (一部のSHホゲホゲ系 API も含む) などで
内部的に「隠れたウィンドウ」が生成されるようなスレッドは、非UIスレッドだからといって長時間ブロック
して処理を行うと DDE ブロードキャストを阻害し、シェル( Explorer) の動作を重くします。



615 名前:デフォルトの名無しさん mailto:sage [04/08/25 18:21]
推奨とは言いたいが言えない企業の悩み

616 名前:デフォルトの名無しさん mailto:sage [04/08/25 18:23]
>>614
追加。例えば Win32 の Sleep API の注意
www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdllpro/html/_win32_sleep.asp
なんかは、.Net でスレッドを作成する場合にも同じく適用されます。
(.Net の場合には AppDomain 間をまたがるメソッドの呼び出しでも隠しウィンドウが生成されると思います)






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

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

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