VBプログラマ質問スレ(6.0以前) Part33
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGVB.NETの話題はできるだけひかえてください。
前スレはこちら
(pc2サーバ壊滅で見れない。pc2をpc5に変えれば見れる。
過去ログの場所がどうなるのか良く分からんので次スレ立てる人修正よろ)
Part25 http://pc2.2ch.net/tech/kako/1052/10526/1052627913.html
Part26 http://pc2.2ch.net/tech/kako/1055/10551/1055145106.html
Part27 http://pc2.2ch.net/tech/kako/1058/10586/1058674927.html
Part28 http://pc2.2ch.net/tech/kako/1061/10612/1061296197.html
Part29 http://pc2.2ch.net/tech/kako/1065/10654/1065446334.html
Part30 http://pc2.2ch.net/test/read.cgi/tech/1069160036/
Part31 http://pc2.2ch.net/test/read.cgi/tech/1073732636/
Part32 http://pc5.2ch.net/test/read.cgi/tech/1077216109/
【VB.net関連スレ】
VB.net質問スレ (Part5)
http://pc5.2ch.net/test/read.cgi/tech/1078134703/
【Win32 API関連スレ】
Win32API質問箱 Build17
http://pc5.2ch.net/test/read.cgi/tech/1077470361/
心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六. VB情報募集中。
七.VB.NETの話題できるだけひかえる。
0153デフォルトの名無しさん
NGNGVisual Basicゲームプログラミング―Visual Basicで創るArtistic Game World
なんですが、DirextXを使ったものでしょうか?それとも初期のbitdrawのものでしょうか?
VB4のときに出たらしいのですが個人的には、ビットマップ作画だったらありがたいのですが。
この本を持っていらしてる方、ちょっと内容を教えてください。
通販しようかと思っているのですが。
0154デフォルトの名無しさん
NGNG読んだことないけど、多分DirectXは使ってないんじゃないか。
0155デフォルトの名無しさん
NGNGActiveReportって何?どこでダウンロードできるの?
0156デフォルトの名無しさん
NGNGVBからDirectXを扱えますが、きっとWinGでしょう
0157デフォルトの名無しさん
NGNG>>156
情報ありがとうございます!
使ってないだろうと言うことが分かって嬉しいです
検索してみたのですが、目次が載って無くて。当時だったらあったかもしれません。
個人的にはVBでビットマップ作画のいい参考書を探しているのですが。
(PDAで作ってるため VBに近い言語です)
親切にしていただけて嬉しく思います。ありがとう
0158デフォルトの名無しさん
NGNG外しているかもしれないが
二つ用意しておいて Visible の切替えってのはだめ?
0159デフォルトの名無しさん
NGNG有り難う御座いました。
0160デフォルトの名無しさん
NGNGthis.text = "hoge"
end sub
みたいにそのイベントのコントロール、つまり自分自身を
指すthisみたいなのないですか?
0161デフォルトの名無しさん
NGNG現在実行中のファイル名と関数名って取得できないのでしょうか?
Cでいうところの__FILE__、__LINE__ みたなのが使いたいです
ご教示願います。
0162デフォルトの名無しさん
NGNG例えばこの文字列を例にとりますと
この文字列から"index"の部分と".html"の部分を抜き出すには
どうしたら良いでしょうか?
0163161
NGNG0164デフォルトの名無しさん
NGNGa=split(sSource,"/") ' / で分解
b=split(a(ubound(a)),".") '.で分解
これで b(0) に "index" が b(1) に "html" が入る。
0166デフォルトの名無しさん
NGNG特定のスコープの中では、宣言されてもいない
暗黙のローカル変数が存在するような言語怖くて使えますかって。
>>162
そんなのヘルプ検索すればすぐわかるはず。
逆にいうとヘルプみても解決法がわかんないならプログラミングなんて
やめといた方が身のためと思う。
雑誌のおまけの試用版とか使ってるのならしょうがないけど、それなら
参考書ぐらい買えばいいのに。
InStrとかMid$とか、VB6ならSplitとか、使えそうな関数いっぱいあるじゃん。
0167デフォルトの名無しさん
NGNG>暗黙のローカル変数が存在するような言語怖くて使えますかって。
schemeのlambdaなんかはどうよ?ちょっと違うか。
というか話が違うんじゃない。
イベントを発生させたオブジェクトをsourceとかでイベントの引数に渡してくれたら
便利なケースは考えられると思うし、俺もあったらうれしいことはあるとは思う。
160への解答としては、そんなことはできないってことになる。
Combo1_Clickというプロシージャ名にイベント発生源のオブジェクト名が入っていて
ユニークになってるから、Combo1.Text="Hoge"で別に問題は無い。
何で困っているのかもう少し具体的に書いてもらえれば、なにか代替案を示すことはできるかもしれないが。
0168160
NGNGcall hoge(me.activecontrol)
end sub
private sub combo2_change()
call hoge(me.activecontrol)
end sub
みたいなことがしたいんですが
me.activecontrol=そのイベントを呼び出したコントロール
でいいのでしょうか?
0169デフォルトの名無しさん
NGNGActiveControlはフォーカスを持っているコントロール。
普通はイベントを起こすのはフォーカスを持っているコントロールだけど例外もあるから。
0171デフォルトの名無しさん
NGNGコントロールをユーザコントロール(やクラス)でラップして、
イベントをユーザコントロール側で受けてそこでイベントを処理する方法もある。
もし違う処理を行いたければイベントの処理はイベントの処理を行うクラスを
ユーザコントロールに登録して行うという、Java風の仕組みを作れば
望みのことが出来なくは無い。
まあ一番手軽なのはコントロール配列にしてインデックスで区別する方法だけど。
0172デフォルトの名無しさん
NGNGコンポーネントを見ていると、いくつかグリッドが存在するのです、
それぞれの特徴があると思いますが、どれが使いやすいのでしょうか?
それぞれの機能を紹介したサイト等はないでしょうか?
0173デフォルトの名無しさん
NGNGそんなことをこんなところで聞くような横着な人に
グリッド系のコントロールなんて使いこなせないと思う。
簡単なことならどれ使ったって大差ないし。
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG使いやすさは人によって違うと思うから
試用版とかまず試してみたら?
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGフォーム1からフォーム2に設置してある
オプションボタンのValue値のTrue・Falseを読み取りたいのですが、
どうしたらいいでしょうか?
フォーム2内でグローバル変数を宣言してそれに値を格納してフォーム1で読み出す。
という方法は思いついたのですが、できれば直接読み取りたいです。
0178デフォルトの名無しさん
NGNGvb6以前ってコントロールは全部Publicじゃなかったっけ?
......って言ってもたぶんわからないんだよね。
上のコードエディタで"form2."って打ってみて。
インテリセンス働くと思うんだけど。
0179デフォルトの名無しさん
NGNG0180178
NGNG0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG返信ありがとうございます。
コードエディタ上で form2 と打ち込んで実行するとエラーはでるのですが
インテリセンス(文法チェックですよね?)は働かないようです。
今まで
Form.Option1.Value と書いていたのを
Form!Option1.Value としてみたのですが
やはりForm2を閉じるとValueの値が真に戻ってForm1から真・偽を読み取る事ができません。
0183デフォルトの名無しさん
NGNGForm2.Option1.Value と書いていたのを
Form2!Option1.Value としてみたのですが
です。2が抜けていました…すいません。
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGで、Option1.Valueにアクセスしに行ったときに再度ロードされて、初期状態の
やつを参照してるとか。
今進んでいる所は、たぶん鬼門だろうから、初心者本でも読み返したほうが
いいかもしれんね。
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGはい、その通りです。
>>185
その通りです。Unloadしております。
鬼門ですか…。初心者本を読んで調べたのですがよくわからないのです(汗
0188デフォルトの名無しさん
NGNG(Formモジュール)=(Classモジュール+Window)を理解しようね。
C++やJavaとかでいう他クラスとのやり取りに、Publicなインターフェイス用関数を使って、Privateな変数にアクセスする要領と同じ。
0189デフォルトの名無しさん
NGNG'Form1のコード
Dim Result As Boolean
Load Form2
Form2.Show vbModal ,Me
Result = Form2.Option1.Value
Unload Form2
'Form2のコード。OKボタンにでも書いといて
Me.Visible = False
Load,Unload,New,Nothingについて調べてみるといいよ。
0190デフォルトの名無しさん
NGNGクラスモジュールの使い分けと言うか、コードの書き分けって、どう
言う指針で行うのがいいんでしょうか?
0191デフォルトの名無しさん
NGNGしかしこの「別のフォームの......」って愚問は定期的に湧いてくるな。
次スレからは1のテンプレに入れてほしいよ。
0194デフォルトの名無しさん
NGNG0196187
NGNGあれ?何かまずい事書いたかな…(−−;
もし、私の質問だと思われてたら私の質問はもう区切りがついたので、このままスルーされそうだな〜
と思ったのでそう書いたのですが(汗
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGそれぞれ「そうすべきもの」で使い分ける。
ウインドウを表示するならフォームを使うのが常道とかね。
ひょっとして釣られた?
0199デフォルトの名無しさん
NGNGオマエが釣り確定。あげんじゃねえよカス
0200デフォルトの名無しさん
NGNGワラタ
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG>> 「別のフォームの......」って愚問
これをまったく知らないで、
何から何までグローバル変数使ったり、
フォームイベントの発生要因とかまったく知らなかったり
する愚者が多数いるよ。
しかもそういう人に限って、VBだからVBらしくコーディングしているんだ、と意味不明なことを嘯くんだよな。
0204デフォルトの名無しさん
NGNG混乱させるようで悪いが・・・
'Form1のコード
Dim Result As Boolean
Form2.Show vbModal, Me
Result = Form2.Result
'Form2のコード
'関数の外に
Public Result As Boolean
'OKボタンに
Result = Me.Option1.Value
Unload Me
0205190
NGNG釣りじゃなかとですよ。
クラスモジュールはクラスを作るために使えばいいと思うのでまだいいのですが、
標準モジュールとフォームモジュールが曖昧になってしまうんですよね。
ぶっちゃげた話、>>198さんのいうとおり、フォーム周りのコードをフォーム
モジュールに書けば、フォームモジュールと標準モジュールを分離して再利用
する事も出来るはずなのですが、標準モジュールでフォームのインスタンスを
生成してフォーム上のコントロールにアクセスしたり、フォームモジュールから標準
モジュール上のパブリックプロシージャ-をコールしたりすると、標準モジュールと
フォームモジュールは独立しなくなる訳で。
かと言ってフォームモジュールに全部書く、ってのは宜しくないそうで、どのように
分ければいいのかなと悩んでしまう訳でして。
用法を間違ってるかも知れないですが、恐らくフォームモジュールと標準
モジュールとの間のインターフェイスが決まってないと言うか曖昧になってるのが
原因じゃないかなと思う(言葉の意味がよくわかってないので違ってるかも知れ
ない)のですが、標準モジュールからフォームのコントロールにアクセスしたい時に、
どのようにやるのがスマートなのかなぁ?
0206デフォルトの名無しさん
NGNG思いつきでリファクタリングでもして
つないでいくのがよい
0207190
NGNGリファクタリングって、確か元の仕様を変えずに中身と言うか実現方法を変更
したり新たな仕様を追加する事でしたっけ? 似たような事はよくありますねぇ。
例えば、最初は独立したコントロールで書いてたけど、結局同じ処理のプロ
シージャ-になっちゃった、って場合にコントロール配列にしてIndexで制御する
方法に書き換えたりとか。(うわ、なんか違うっぽいしレベル低いなぁ俺(´・ω・`) )
最初に仕様をガチガチに決めればそう言う事にはならないのだろうけど、一人
で開発やってると、書いてる途中で、もっといいアイディアや実現方法を思い
ついたりすると書き直しちゃいますしねぇ。
0208デフォルトの名無しさん
NGNGという件で質問させていただきました
Enumを使用するといい という回答を頂いていたんですが
この列挙型といわれる宣言内部に数値やアドレスではなく
文字列を持たせる事も可能なのでしょうか?
0209デフォルトの名無しさん
NGNGそもそも、標準モジュールでフォームのコントロールを直接参照する必要があるのかって所から検討すべき。
コントロールを直接参照する事は即ちフォームに依存だからぬ。
そのへんのやり方は>188が指摘してるぞ。
標準モジュール上にForm1.TextBox1 = ・・・
なんて書くのは愚の骨頂。
無難な線として
Public Sub Hoge(ByRef frm As Form1)
みたいな感じで引数でフォームへの参照を受けて以後その引数を利用してアクセスすれば良い。
0210デフォルトの名無しさん
NGNGそこなんだよね、綺麗にできるかの違いって。
コントロール自身を引数にできるということを知らない人が多すぎ。
それをやるだけで、結構おしゃれな処理とかできるし、
グローバル変数とか馬鹿でかい参照範囲の変数とか、ほぼ撲滅できるし。
0211デフォルトの名無しさん
NGNGこれってフォームにオモイックソ依存してないか?
Form1ってハードコーディングしちゃってるし。
0212デフォルトの名無しさん
NGNGそれは単なるタイプミスだと思われるけど、重大なバグになるタイプミスだな。
0213デフォルトの名無しさん
NGNG標準モジュールがあるからVBって気もするけどなぁ
うちの会社の先輩が言ってたけど、
VBは標準モジュールにバリバリ書いて、コントロールを使う形にするのが楽らしい
コントロールを使ってれば標準モジュールもそんなにひどくならないそうな
だから、設計してコントロールつくるやつが上にひとりいて、
それ使ってコーディングする奴が何名かいるのがいいらしい
実際、その人APIとかクラス化して投げてくるんだけど、やりやすいのはたしか
ただ、そういうやりかただと悲しいかな、俺の勉強になんないんだよな(w
0214デフォルトの名無しさん
NGNG>209の趣旨は、引数として受け取るようにする事で、少なくとも暗黙のインスタンスを
参照するという行為は避けられるよ、って事でつ。
インタフェースの使い方覚えるのは次の段階かなと思ったんで。
0215デフォルトの名無しさん
NGNG引数で受け取るのも「暗黙のインスタンス?」を参照してるってことに
早いとこ気付けよ。
VB6.0ではオブジェクトの解放がどの時点で行われるか知ってっか?
0216デフォルトの名無しさん
NGNG皆様の知恵を拝借したいと思って来ました。
テーブル1のフィールドAの値に対してテーブル2のフィールドBの付随情報を
抽出したいと思っています。双方のフィールドは0から始まる電話番号形式の文字列です。
フィールドAには正式な電話番号(09012345678とします)が格納されており
フィールドBには電話番号の範囲になるような4桁以上11桁以下のデータが格納されています。
例えば「09012」のようなデータです。
フィールドBのデータをDBから抽出後に降順でソートし、フィールドAのデータの
先頭数文字(フィールドBの文字数)を検索条件とし、最初に合致したものに対するデータを
さらに抽出したいと思っています(例えばCSV形式のファイル等に)
長すぎると怒られたので分けます。
0217デフォルトの名無しさん
NGNG例→フィールドAの格納データ「09012345678」に合致するフィールドBの付随データを抽出
フィールドB データ
0902 付随データ この場合「0902」と「0901」2345678で比較→合致しないので次へ
09013 付随データ この場合「09013」と「09012」345678で比較→合致しないので次へ
09012 付随データ この場合「09012」と「09012」345678で比較→合致するので抽出
09011 付随データ
合致するデータがない場合はエラー処理になります。
フィールドAのデータ分だけ抽出処理をして終了という形です。
ただしフィールドBのデータの桁数は一定しておらず4桁の場合もあれば
5桁の場合もあるという感じになっております。
こういった処理を行なう場合、どのような感じで作ればよいのでしょうか…。
フィールドBのデータを毎回Len関数でチェックしてフィールドAのデータをLen関数で
返ってきた値だけ切り出してチェックとかがいいんでしょうか…。
VB6.0、DBはOracleでADO接続でやるつもりです。
VBから離れて期間も経っており、ほとほと困り果ててこちらに参りました。
詳しい方いらっしゃったら宜しくお願いします。スレ違いでしたら申し訳ありません。
0218209
NGNG>209の引数frmはあくまで呼び元から渡されたインスタンスを参照するのであって、
暗黙のインスタンスを参照する訳では無いと思うのだが・・・
呼び元で
Call Hoge(From1)
とか
Dim f As New From1
Call Hoge(f)
なんてやられたらそりゃNGだけど、それは呼び元の責任でぁ。
もっと良いやり方があればご教授願いたい。
オブジェクトが解放されるのは参照カウンタがゼロになった時。
だが少なくとも、>209のメソッド内では解放を意識する必要は無い。
間違ってる所があったら指摘キボンヌ。
0219デフォルトの名無しさん
NGNG標準モジュールでForm1を参照するのって悪いの?
AS Objectとかにして、クラス使って再利用性を高めるんならそれもそうだろうけど
メモリに常駐してる時点でグローバル関数とかわらんと思って
標準モジュール上でForm1参照しちゃってるんですけど
やっぱ関数化すべきなのかな・・・
0220デフォルトの名無しさん
NGNGForm1のインスタンスはLoadされている保証は無いし、複数ある可能性もある。
0221デフォルトの名無しさん
NGNGVBで判断するのか、SQL(DB側)で判断するのかをまず決める。
まあ、普通にDB上でやればいいんじゃないの?
前方一致検索でしょ。
0222デフォルトの名無しさん
NGNG激しく同意
せっかくオラクルを使うのならちんたらコーディングするよりSQL
でするべき
オラクルならADOよりoo4oのほうが親和性がたかいよ、、
0223デフォルトの名無しさん
NGNG検索された中で最大の云々かんぬん
まあ、ここを見て参考にしてみれば?
ttp://homepage1.nifty.com/kojama/works/rdbms/ont.html
0224デフォルトの名無しさん
NGNG懐かしいフレーズを聞かせてもらったよ、ありがとう。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG知るイベントはありませんか?
0227226
NGNGiniファイルに保存して次回起動時にはその幅に戻したいのです。
0228226
NGNG2つのリストビューを片方が変更されたらもう一方も
追従するように同じ幅にしたいのです。
0229デフォルトの名無しさん
NGNGとんでもなく遅レスがありがとうございます。
なるほどです。
0230デフォルトの名無しさん
NGNGAからBを引っ張ると考えるからややこしく思えるんだろうけど
実際は単純な総当り検索で、条件を前方一致にして(+)付けるだけ。
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGない。
と思う。
0233デフォルトの名無しさん
NGNGある。
0234226
NGNG0235デフォルトの名無しさん
NGNGイベントは無いけどメッセージは飛んでる。
なんか面倒な気もしたが、がんばれ。
0236231
NGNG使いたいと思ってます。VB初心者なものでよろしければやりかたを教えてください。
0238デフォルトの名無しさん
NGNGタイマイベントでカラムヘッダが変更されてないかチェックして
変更があったら同期するようなコード書いたらいいんじゃない?
秒五回ぐらいなら遅延もそんなに気にならないし、
cpu時間の消費もほとんど無視できるレベルだと思うけど。
エレガントじゃないのはいや、ってか。
それをいうならサブクラス化だってそれ以上に.....。
0239デフォルトの名無しさん
NGNGVBのサブクラス化がエレガントじゃないっていのは同意するけどタイマーはなぁ。
業務でそれやったら「こいつ大丈夫か?」って思われちゃうだろうな。
自分しか使わないツールだったら許せるけど。
0240240
NGNGMDIアプリで、OracleのDBをいじるアプリを書いています。
漏れが担当しているのは、その一部の画面なんですが、
そのフォームから、更に別のフォームを子フォームとして
開いて、public 変数を介して情報のやり取りをしようと
しているのですが、うまくいきません。
親フォームを frmParent、子フォームを frmChild とします。
うまくいかないのは
・親フォームの Public strPText As String を子フォームから
frmParent.strPTest の形で参照すると、何も入っていない文字列
になる。(親フォームでは文字列を代入しています。)
・親フォームのサードパーティ製のスプレッドを子フォームから
frmParent.Spread の形で操作しようとすると何も反応がない。
などで、
0241240
NGNGfrmChild.strCText の形で代入できる。
・同様に子フォームの Public objForm As Form にもアクセスできる
ので、親フォームから、親フォーム自身を objForm に代入して、
これを使って上記のうまくいかない形のアクセスを行うと、ある程度
はうまくいく。(プロパティの代入と参照)
例) objForm.strPText
objForm.Spread
・この方法でもスプレッドのメソッドは動作しなかった。
・親フォームの Public Function は子フォームから実行可能。
上記のような状況です。Visual Soucesafe を使って、複数人で
開発しています。
0242240
NGNGシンプルなプロジェクトを使って試したら、Public 変数には
何の問題もなくアクセスできたので、いったい何が問題なのか
検討もつかない状況です。
objForm を使うと冗長になりますし、IDEのインテリセンスが
使えなくてやりづらいです。
0243デフォルトの名無しさん
NGNGfrmParentがfrmParentとして宣言されて開かれたのではなく・・・
Dim objForm As frmParent
Load objForm
objForm.Show
と言う風に開かれているのでは無いかと思えるが。
LoadされていないフォームのPublic変数にアクセスした
場合と同じ動きをしているような感じだから。
試しに、親フォームのPublic変数を参照しても空文字が
帰ってくる部分の直後にfrmParent.Showってやってみて
くれないかな?
0244240
NGNGChildではなく、Parentの方ですよね?
私も全体像は分からないのですが、起動(エントリポイント)は
標準モジュールから行っているみたいなので、そういう形で
起動している可能性はあります。
いまは自宅で、会社にいかないと詳細が分かりませんので
後で確認したいと思います。
ちなみにChildの起動は
frmChild.Show 0
で起動しています。
0245240
NGNGうーん。子ウインドウは frmChild.Show でやってるから、
親から子には問題なくアクセスできるのかな。
少し暗雲に光明が差し込んできた感じです。
ありがとうございます。
今日はこのワケワカメなバグでぐったりしてしまいました。
0246デフォルトの名無しさん
NGNG原因はたぶんフォームの「クラス」と「インスタンス」を混同していることと、
変数のスコープを忘れていることにあると思う。
フォームのインスタンスへの参照が常にグローバルレベルへで存在しているとは
限らないよ。
Form1内の複数のスコープから、Form2型のForm2という名前の同一のオブジェクトに
アクセスしたいなら、「オブジェクトForm2」への参照をForm1のモジュールレベルで
保持しなきゃ。
そうでなきゃ、たとえば同じ"Form2"にアクセスするつもりのコードを
Form1のロードイベントとForm1のコマンドボタンのクリックのイベントハンドラに
書いても、それぞれ「暗黙の宣言」によって生成された別々のForm2型の
インスタンスに対するアクセスになってしまうよ。
0247デフォルトの名無しさん
NGNGそれなら、子ウィンドウをfrmChildで呼び出しても
問題なくアクセスできますね。
やっぱり、最初に親ウィンドウを開いている所に
原因がありそうですね。
0248190
NGNG> 無難な線として
> Public Sub Hoge(ByRef frm As Form1)
> みたいな感じで引数でフォームへの参照を受けて以後その引数を利用してアクセスすれば良い。
なるほど、そのHogeプロシージャーをフォームモジュールに書くんですね?
フォームのコントロールを触る処理はフォームモジュールに書いて、フォーム
に依存しない処理を標準モジュールに書けばいいのかな。
>>210
コントロールを引数にするのは非常に便利なのでしょっちゅう行ってるんですよ。
フォームに載ってるコントロールの特定のプロパティやオブジェクトを一斉に操作
したい時なんか、For eachと組み合わせて使うととても重宝してますです。Fontオ
ブジェクト弄ったり、MouceIconプロパティ弄ったりと。
0250デフォルトの名無しさん
NGNG彼自身が冒頭に書いているとおり、(つまり>>210の文章は矛盾してるんだが)
いったいどこにフォーム上のコントロールをいじるコードを
フォームモジュール以外に書いてわざわざ見通しを悪くする必要がある。
それに標準モジュールにはAPI宣言と構造体の定義、サブクラス化するときの
ウィンドウプロシージャ等、VBの言語仕様上標準モジュールにしか
書けないコード以外書くべきでない。
当該のフォーム以外で発生するイベントをトリガーにして
フォーム内のコントロールをいじりたい、ってのなら相手に自分の参照を
引数で渡すなんてわけの分らんことしないで、フォームモジュール自身に
イベント発生源のオブジェクトへの参照をメンバ変数としてもたせて
イベントを受信するようなコードを書けばいい。
もっとも、これらはある程度の規模以上のプログラムを設計する場合の話で、
「〜を標準モジュールに書くべきかどうか?」なんて悩んでいるってことは
つまりどこに何を書こうと十分に見通せる程度の規模のコードってことで、
それなら「言語厨」に何を言われようと別に好きなように書けばいいと思うんだが。
0251デフォルトの名無しさん
NGNGいや、>246の意見は一見正しいけど、VB6.0(以前含む)での
挙動ではない。(Unloadを実行していれば別だが)
VBのフォームは暗黙にPublic宣言されている様な存在なので。
試しに、検証してみたら、Form1.Showで開いた場合、何処からでも
Form1のPublic変数はForm.hogehogeで値が取れる。
それぞれのプロシージャ内でローカルに宣言したオブジェクト変数の
Form1なら話は別だがね。
もひとつ検証して、>243で書いた通りの事をすると、確かに
frmParent.strPTextでは空文字になる。
>243では、Loadの直前に「Set 〜 = New frmParent」が必要ですが。
0252本日新規
NGNGピンときたら教えてほしいっす
VCで作成したDLLをVBからデクレア?で宣言してその関数をフォームから
呼び出すと ファイルが(関数をもっているDLL)みつかりません
ってでるんすよ パスの通った場所にいれてるのですが
再起移動かけようが環境変数追加しようが事象がかわりません
ちなみにMFC DLL作成スケルトンで作ったファイルでTelnetの処理をしてます
■ このスレッドは過去ログ倉庫に格納されています