1read 100read
2011年12月1期プログラム48: VBプログラマ質問スレ(Ver.6.0 まで) part57 (759)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
・ 次のスレ
49: Microsoft Silverlight その9 (63)
50: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (25)
2: 【2ちゃんねる全板】S-BananaのSって?【移転します】 (18)
VBプログラマ質問スレ(Ver.6.0 まで) part57
1 :11/04/30 〜 最終レス :11/12/09 ここは Visual Basic 〜6.0 の質問スレです。 質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、 「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。 VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。 ○ 質問者の心得 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。 二.VBScript、インストーラーなどはこのスレでOK。 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。 四.荒らしは相手しない。 ○ 回答者の心得 一.答えられない質問は無駄に罵倒せずスルー。無理するな。 二.代用法を強制しない。 三.回答する上で必須ではない情報をむやみに聞き返さない。 四.荒らしは相手しない。 五.VB情報募集中。 六.回答は質問者が理解できるよう具体的に。 MSDN Online Japan ホーム http://www.microsoft.com/japan/msdn/default.asp Visual Studio 6.0 Service Pack 6 http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx Google http://www.google.co.jp/ ※「まず自分で調べる」クセを身につけよう。
2 : Part 1 http://piza2.2ch.net/tech/kako/968/968328471.html Part 2 http://piza2.2ch.net/tech/kako/990/990793224.html Part 3 http://piza2.2ch.net/tech/kako/1000/10005/1000523122.html Part 4 http://pc.2ch.net/tech/kako/1006/10069/1006922992.html Part 5 http://pc.2ch.net/tech/kako/1010/10106/1010624646.html Part 6 http://pc.2ch.net/tech/kako/1013/10138/1013844542.html Part 7 http://pc.2ch.net/tech/kako/1015/10158/1015836357.html Part 8 http://pc.2ch.net/tech/kako/1018/10187/1018794901.html Part 9 http://pc.2ch.net/tech/kako/1020/10208/1020830472.html Part10 http://pc.2ch.net/tech/kako/1022/10221/1022127528.html Part11 http://pc.2ch.net/tech/kako/1024/10243/1024380249.html Part12 http://pc3.2ch.net/tech/kako/1026/10266/1026642565.html Part13 http://pc3.2ch.net/tech/kako/1029/10292/1029241786.html Part14 http://pc3.2ch.net/tech/kako/1030/10309/1030947162.html Part15 http://pc3.2ch.net/tech/kako/1032/10327/1032706491.html Part16 http://pc3.2ch.net/tech/kako/1034/10343/1034302532.html Part17 http://pc3.2ch.net/tech/kako/1036/10361/1036154952.html Part18 http://pc3.2ch.net/tech/kako/1038/10381/1038103769.html Part19 http://pc3.2ch.net/tech/kako/1039/10398/1039859691.html Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html Part21 http://pc2.2ch.net/tech/kako/1044/10440/1044028945.html Part22 http://pc2.2ch.net/tech/kako/1046/10463/1046354784.html Part23 http://pc2.2ch.net/tech/kako/1047/10477/1047743187.html Part24 http://pc2.2ch.net/tech/kako/1050/10501/1050151126.html 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
3 : 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/ Part33 http://pc5.2ch.net/test/read.cgi/tech/1080606445/ Part34 http://pc5.2ch.net/test/read.cgi/tech/1084544243/ Part35 http://pc5.2ch.net/test/read.cgi/tech/1087519251/ Part36 http://pc5.2ch.net/test/read.cgi/tech/1092906058/ Part37 http://pc5.2ch.net/test/read.cgi/tech/1090286450/ Part38 http://pc5.2ch.net/test/read.cgi/tech/1095673000/ Part39 http://pc5.2ch.net/test/read.cgi/tech/1099737063/ Part40 http://pc5.2ch.net/test/read.cgi/tech/1106748775/ Part41 http://pc8.2ch.net/test/read.cgi/tech/1112414085/ Part42 http://pc8.2ch.net/test/read.cgi/tech/1116924129/ Part43 http://pc8.2ch.net/test/read.cgi/tech/1123952677/ Part44 http://pc8.2ch.net/test/read.cgi/tech/1130231657/ Part45 http://pc8.2ch.net/test/read.cgi/tech/1133977286/ Part46 http://pc8.2ch.net/test/read.cgi/tech/1138975113/ Part47 http://pc8.2ch.net/test/read.cgi/tech/1141320612/ Part48 http://pc8.2ch.net/test/read.cgi/tech/1146678926/ Part49 http://pc8.2ch.net/test/read.cgi/tech/1152667953/ Part50 http://pc10.2ch.net/test/read.cgi/tech/1161517193/ Part51 http://pc11.2ch.net/test/read.cgi/tech/1169949451/ Part52 http://pc11.2ch.net/test/read.cgi/tech/1179563617/ Part53 http://pc11.2ch.net/test/read.cgi/tech/1187667616/ Part54 http://pc11.2ch.net/test/read.cgi/tech/1204552981/ Part55 http://pc12.2ch.net/test/read.cgi/tech/1247487156/ Part56 http://hibari.2ch.net/test/read.cgi/tech/1275397597/
4 : クラス間の依存性は減るけど、XMLへの依存が強いってことは何の問題もないの?
5 : 素人は黙ってネンネしなさい
6 : >>1000 だからDIはそれを使いやすくフレームワークに まとめた仕組みのことを言うんだよ。 具体的にはオブジェクトの生成部分を コード内に書かないでフレームワークに任せる。 多態を使ってても、オブジェクトの生成は コードに書いてしまうだろ。それじゃだめだってこと。
7 : >>4 依存をなくすのではなくて依存を分離するのが目的。 クラスから依存が減る。それはなくなるという意味ではなく XMLに分離するということ。 あなたの言っていることは問題ではなくて、 そもそもそういうふうにしたい事、つまり目的だよ。
8 : なるほどね
9 : こういう感じのとは違うん? Private Sub Command1_Click() Dim fso As Object Dim objname$, pth$ objname = "Scripting.FileSystemObject" Set fso = CreateObject(objname) pth = CallByName(fso, "BuildPath", VbMethod, "c:\windows", "test.ini") Debug.Print pth End Sub
10 : >>9 やってることはそれに近いけど、それでは それは普通のやり方よりコードが増えて、面倒になってる。 そういう面倒事をやってくれるのがDIコンテナ public fso As IFileSystemObject Private Sub Command1_Click() pth = fso.BuildPath("c:\windows", "test.ini") Debug.Print pth End Sub これだけじゃ動かない? たしかにfsoがNothingだからね。 でこれを動くようにしてくれるのがDIコンテナ。
11 : コンパイラがDIコンテナを使うってことか
12 : >>11 なんかとんでもない勘違いをしてるぞw
13 : 眠いので頭が正常に働いてないのかも 明日昼間もういちど前スレから読み直してみる ありがと
14 : 実際には、FileSystemObjectはIFileSystemObjectインターフェースを 継承してないから、fsoにFileSystemObjectそのものを入れることはできない。 入れることができるようにした「FileSystemObjectっぽいもの」を作る必要がある。 でもそれは既存のクラスの問題であって、自分で作るクラスには関係ない話。 重要なのは、このコードには new FileSystemObjectっぽいもの というコードが入ってないから fsoには「FileSystemObjectっぽいもの」だけではなく、たとえば テスト用のFileSystemObjectを入れたり、ネットワーク対応のFileSystemObjectを入れたりできる。 実際に入れる作業をするのはDIコンテナだけどね。 特にテスト用のFileSystemObjectを入れられるところが重要で、 FileSystemObjectを使わずに単体テストができる それでいてコードが前と殆ど変わってないところも注目するところ。 で、最初の質問に答えると、VB6用のDIコンテナは知らないが(多分ないと思う) DIコンテナを作ることは可能
15 : Windows Script Host Object Model (wshom.ocx) Microsoft Sripting Runtime (scrrun.dll) の両方にFileSystemObjectあるけど未だに違いがわからん
16 : むしろ、継承はないがインターフェースはあるVB6には DIはぴったりだと思うな。 DIが出てきた背景には(昔の)EJBの継承を強要するやり方は 複雑でテストしにくい。POJO(継承使ってない単純なオブジェクト)を 使いましょう。ってのがあるし。 VBはもともと継承が使えない。
17 : VB6での新規案件なんかあるのか?
18 : ああ、コンパイラじゃなくて 別のとこでfsoに代入するコードが書かれてるってことか
19 : >>18 そう。書かれてる。 ただしDIコンテナというフレームワークが やってくれるところだから見るべきところではない。 勝手に入れてくれるという認識でOK ただし、VB6用のDIコンテはないw
20 : よくわかった
21 : 一応、開発にはimplements使ってる。 ListViewとかTreeViewへの表示にはimplementsしたクラスを 利用してる。これだけでもだいぶ助かるけど… Javaだとインターフェースはインターフェースだけで その場でインターフェースをnewして、しかもその場で 実装を書くことが可能。 VB6やってて不便に思うのは… 引数付きコンストラクタが無い事と、インターフェースのnew実装か。
22 : インターフェースをnewするって意味が分からないけど・・・ 引数付きコンストラクタは、適当な関数でも作ればいいと思う。 newして引数を設定する関数でも、newしてクラスのメソッドを呼び出す関数でも。
23 : > Javaだとインターフェースはインターフェースだけで > その場でインターフェースをnewして、しかもその場で > 実装を書くことが可能。 あ、無名クラスのことか。 正確にはインターフェースをnewしてるんじゃなくて 名前がないクラス作ってるんだけどな。
24 : VBの場合インターフェース無くても同名のメソッドあれば参照できるんじゃなかったっけ?
25 : Dim c1 As New Class1 'Public Sub Hoge() を持ってる Dim c2 As New Class2 'Implements Class1 をして Hoge()をオーバーライド Dim c3 As New Class3 'Public Sub Hoge() を持ってるClass1とは別物 Dim c4 As New Class4 'Implements Class1 してる且つ独自にPublic Sub Hoge()を持ってる Dim obj As Object Dim ic1 As Class1 Set obj = c1: obj.Hoge 'OK 'Set obj = c2: obj.Hoge 'Error (Class1_Hogeは呼ばれない) Set obj = c3: obj.Hoge 'OK Set obj = c4: obj.Hoge 'OK 自前Hogeが呼ばれる Set ic1 = c1: ic1.Hoge 'OK Set ic1 = c2: ic1.Hoge 'OK 'Set ic1 = c3: ic1.Hoge 'Error (クラスが別物で代入できない) Set ic1 = c4: ic1.Hoge 'OK Class1_Hogeが呼ばれる
26 : インターフェースなくても同名メソッド使えるっていうのは嫌だな。 かといって、インターフェースかぶせても、 インターフェース名_メソッド名 が、メソッド名になるのも、はっきりいってうっとおしい。
27 : 引数の型をObjectやVariantにせず、ちゃんとインターフェース用のクラスの型を設定すればいいし Javaとかだとインターフェース無しでインターフェース用のメソッドにアクセスできるんだっけか? interface Class1 { void hoge(); } class Class2 implements Class1 { public void hoge(){} } で Class2 c2 = new Class2; c2.hoge();ができちゃうけど VBだとちゃんとインターフェースかまさなきゃhogeできないのは優秀なんじゃね?
28 : どうでもいいことだけど、些細なミスnew Class2();ね
29 : >>26 > インターフェースなくても同名メソッド使えるっていうのは嫌だな。 そういう言語は他にもあるし(例 JavaScript、Perl) > インターフェース名_メソッド名 インターフェース名::メソッド名 や インターフェース名.メソッド名 と大差ない まだまだ経験が足りないようだなw
30 : Javaって インターフェース名_メソッド名 に ならないから、 複数のインターフェースで同名のメソッドがあった場合に 困るんだっけ?count()とかありがちなメソッド
31 : vbは優秀だな
32 : まあVB6はともかく、VB.NETのインターフェイスの仕組みは良くできてる。 こればっかりはC#より良い。
33 : VB6のインターフェイスはCOM相互運用のための機能だからああゆう形になるのは仕方が無いね。 VB6のインターフェイスの宣言は中身(実装)の無いクラスを使うことが多いけど、 IDLも使えるあたりもろにCOM相互運用のためのものと分かる。 >>32 VB.NETのインターフェイスは実装のときに C#の明示的実装のような書き方になるのであんまり好きじゃないけど、 良くできてると思うのはなぜ?
34 : >>33 例えばC#の場合、インターフェイスのメンバーを、 (1) 同じ名前のシグネチャのメソッドとして実装した場合、どれがインターフェイスを 実装したメソッドか明示的に分からない。(これは個人的に気持ち悪い) (2) 明示的実装を使った場合は、そのメソッドはインターフェイスを通してしか 呼び出せない。 という問題があるけど、VBの場合はこれがない。 一つのメソッドが普通のクラスメンバでありつつ、同時にインターフェースの 明示的な実装でもありうる。 http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint01/onepoint01_02.html
35 : なんか珍しくオブジェクト指向っぽいスレの流れになってるので この流れで質問させてほしい。 マイクロソフト系言語には、プロパティつうものの存在があって プロパティ用のアクセッサの書き方があるけど、 普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の アクセッサの書き方があるの?
36 : 一つはプロパティという概念を導入した方がクラスの構造がわかりやすくなるから。 変数名などa, b, c, ....でも「実装できそうなのに」分かり易い名前を付けるのと同じ動機。 もう一つはプロパティとメソッドが機械から区別できた方がいい事があるから。 例えばVB6でも.NETでもGUIアプリのデザインをデザイナでデザインできるのはこのため。
37 : >>35 メソッドと同じ書式でいちいちゲッタセッタを書くのが面倒だから。 プロパティならとりあえず変数として宣言しておいて、 あとで気が変わったときにゲッタセッタ(プロパティ)を書けば済む。
38 : >>37 答えになってないでしょ。 何故Bが必要かと聞いているのに、何時でもAはBに変更できるからってそれ何だよ。
39 : レスキュー花ちゃんはありがたいね
40 : わざわざ上げてまで今それを言う理由が理解できない。 あそこは今でも一部tipsは有料でやってるのかな。 そりゃ人がどんな商売しようと自由だけど、個人的にはケツの穴が小さいなと思わずにいられない。
41 : コマンドライン引数で日本語パス・ファイル名を受け付けないソフトって諦めるしかない? 渡すファイルを、一旦、日本語を使わないパス・ファイル名にコピーしてから渡す回避策はあるけれど
42 : >>35 > 普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の > アクセッサの書き方があるの? 人間の感覚だろうなぁ。 プログラム言語とは関係ないUMLだって、 メソッドとは別に属性(プロパティ)というものがある。 だけど、これ、ゲッタ、セッタで置き換え可能。 つまり実装するにあたって属性というものは必要ないということになるが、 やっぱり属性ってのは、メソッドとは別ものと人間は考えてしまうようだ。
43 : >>35 オブジェクト指向の話になるとオブジェクト指向論と オブジェクト指向言語の実装についての話がごっちゃになるんだが メッセージパッシングをメソッド呼び出しで実装したと考えれば 外部公開属性はやっぱ別にしたい
44 : ゲッタ・セッタでは object.property++ なんて書き方ができない object.setProperty(object.getProperty()+1) こうなる。
45 : VB6にインクリメントの演算子なんてあったっけ?
46 : >>44 >object.property++ なんて書き方ができない この書き方をしたいならメンバ変数をPublicにすれば良いだけ。 >object.setProperty(object.getProperty()+1) この方が安全といえば安全と思う。
47 : 安全とか危険とか何意味不明なこと言ってるんだw インクリメント演算子なんてものはないにしても、>>44 の言いたいことはまあ半分は分かる。 要するに、 >object.setProperty(object.getProperty()+1) こういうのは見難いし醜いということ。 ついでに変数をPublicにしたのでは値の取得または設定時に動作を絡ませることができない。
48 : インターフェースを変えることなく、 感覚通りに名前をつけられるのが プロパティのいいところ。
49 : >object.setProperty(object.getProperty()+1) こういうのは object.addProperty(1) を作ればいいのでは
50 : >>49 まあそれが妥当だろうね。
51 : どこが妥当だよw 属性(プロパティ)が100あったら、100ごとにセッタ、ゲッタ、>>49 相当のものを 一々書くのかw 書く手間のことを言ってるんじゃない。 各属性ごとにその3つなら3つのメソッドを管理するの? やってられるかよ。 ちなみにaddHogeでは「Hogeを足す」になってしまわないか?
52 : 必要なメソッドは必要な時に記述
53 : まずプロパティが100あるっていう前提からしてアホっぽいが >addHogeでは「Hogeを足す」 まさにそういうメソッドだろう
54 : いい歳こいて日本語の「てにをは」が使えないのは恥ずかしいよ。 「Hogeに足す」と「Hogeを足す」の違い分かる?
55 : んなもんHogeが実際なんなのかによるだろうと思うが 気にいらんかったらaddHogeValueでもaddHogeCountでも 好きに作ったらええがな
56 : VB2003の質問はここでよろしいでしょうか?
57 : ここはVB6まで
58 : プロパティに自由にアクセスできてしまうっていうのはどうかと思うぞ。
59 : >>58 それは、ゲッターとセッターの両方をつけるのと何が違うんだ?
60 : >>59 ゲッター/セッターなら、変な値を設定できないようにしたり、 読み出された回数数えたりできるよ。
61 : フレックスグリッドコントロールを使ってるんですが、 エクセルみたいにセルの下や右だけ罫線の色を変える、みたいなことはできないんですか?
62 : 付属のMSフレックスグリッドでは出来ないけど フレックスグリッド系コントロールの中には、それが出来るものもある 当然、無料じゃないけどな あとはラインとかピクチャーコントロールとかに色つけて重ねて 擬似的に実装するとかな
63 : >>60 プロパティプロシージャでもできるやろ
64 : >>63 >>59
65 : >>58 以降の流れはどれも何が言いたいのかさっぱり分からん。 特に>>64 個人的にはこういうのは他人がエスパーだと思ってるとしか思えん。
66 : 理解したくなければ放置しとけば言いし、 理解したいなら「どういうこと?」って聞けばいいのに。
67 : ファイルサイズ取得ってこんな感じで問題ない?問題ある? With New FileSystemObject filesize = .GetFile(filepath).Size End With
68 : 実装してみて実際のファイルサイズを取得してみて合ってるならそれでいいのでは?
69 : okわかった。ありがと
70 : ちゃんと8Gオーバーくらいのサイズで試さないとね
71 : >>67 またWithでNewか。いいけど。
72 : えー、With Newって書き方は初めて見た。 これって、End Withで解放されるの? ガーベジコレクション的にも大丈夫? ところで皆さんはガーベジコレクションって言いますか? ガーベッジコレクションって言いますか?
73 : >>72 End Withの後、アクセスしようが無くなって、たぶんメソッド抜けた時点で開放されるかな。
74 : そういうメモリから解放されたかどうかって知るすべあるの?
75 : >>74 自作クラスでやるなら、簡単だよな?
76 : おせーてくらさい
77 : >>76 terminateイベントプロシージャにDebug,Print "hoge"とでも書けば
78 : dd なるほど
79 : 'Class1 Public Sub Hoge() Debug.Print "hoge" End Sub Private Sub Class_Initialize() Debug.Print "initialize" End Sub Private Sub Class_Terminate() Debug.Print "terminate" End Sub 'Form1 Private Sub Command1_Click() Debug.Print "click" With New Class1 Debug.Print "call hoge" .Hoge Debug.Print "aftre call hoge" End With Debug.Print "end sub" End Sub 'Result click initialize call hoge hoge aftre call hoge terminate end sub
80 : VBを今のところ、ただ勉強目的で始めたいのですが、VBの何をまずダウンロードすればいいのか、わかりません。教えてください。 自宅でWindows7を使っています。インターネット接続環境はありません。そのため、ネットカフェでダウンロードして、自宅でそれをインストールしたいのですが、オフラインの自宅でインストールは可能でしょうか? また何というものをダウンロードすればいいのですか? いろいろ調べたら、単なる勉学者は、Express Editionとかいうのをダウンロードすればいいみたいですが、詳しくはわかりません。 以上を踏まえ、どなたか何とぞ、お教えねがいます。
81 : >>80 スレ違い ダウンロード出来るのは、VBではなくVB.NET VB.NET質問スレ(Part36) http://hibari.2ch.net/test/read.cgi/tech/1301828549/
82 : ftp://ftp.microsoft.com/softlib/ このサイトのMSLFILESにあるVB6用のサンプルプログラムってVB6やるからには見ておいたほうがいいの?
83 : ftp://ftp.microsoft.com/ のdeveloprフォルダ
84 : ftp://ftp.microsoft.com/deskapps/games/public/ でゲームでも探して炉
85 : なにがしたいんだよ
86 : フォーム上のコマンドボタンを押すと1行目に『ビート』、2行目に『たけし』とリストボックスに追加されるプログラムがある。【@】、【A】を埋めて完成させよ。リストボックスのオブジェクト名は『List1』とする。 Private Sub Command1_Clic() List1.【 @ 】 List1.【 A 】 End Sub
87 : 動的配列を使い、コマンドボックスを押すたびに配列の数が増えるプログラムを【】を埋めて完成させよ。 Private Max As Long 'データ数を保存する変数 Private Hairetu() As Long '配列 Private Sub Form_Load() Max = 0 'データ数初期化 End Sub Private Sub Command1_Click() Max = Max + 1 'データ数を1つ増やす 【 】'実際に配列の範囲を変更 End Sub
88 : 先生、コマンドボックスってなんですか?
89 : Redim Preserveだが…なんでこんな問題作ってんの?
90 : 学校の宿題なんだろ
91 : 「値を保持したまま」とは書いてないから、ReDimだけで良いのでは? 値の保持が必要ないなら、ReDim Preserveは遅いだけだし
92 : Hairetu()(笑)
93 : Haiyoru(笑)
94 : ググればすぐわかるような基本構文問題には答えんなよw
95 : >>86 先生!なに入れてもコマンドボタンが反応しません!
96 : 確かにあれじゃ反応しないなw なんてマのヌケた出題なんだろう…
97 : 1つの配列の中に重複するデータが多数ある 重複するデータを抜き出したい A,B,A,B,A,A,C,F,C.... 欲しいデータは重複データなので上記の場合 A,B,Cとなります unique以外を取得したいのです
98 : >>97 ソートしてから、2つ以上同一の値が連続しているものを抜粋する Filter掛けて、戻り値のUBoundが1以上のものを列挙する 連想配列を利用する いろいろ方法はあるので、お好きな物をどうぞ
99 : 便利なコマンドがVB6以前に存在するのかを尋ねているのか 最速アルゴリズムを尋ねているのか
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
・ 次のスレ
49: Microsoft Silverlight その9 (63)
50: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (25)
2: 【2ちゃんねる全板】S-BananaのSって?【移転します】 (18)