トップページ⇒tech
1001コメント361KB

VB.NET質問スレ (Part24)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/12/13(木) 10:03:48
前スレ

VB.NET質問スレ
http://pc11.2ch.net/test/read.cgi/tech/1189038267/
(Partがありませんが、23です。)
テンプレは2〜5くらいまでの間にある予定
04494312008/01/13(日) 02:00:27
>>448
MessageBoxで確認しているので間違いなくCtrl+A以外ではイベントが発生していません
Controlキー単独だとKeyDownイベントが発生しますが、Ctrl+A以外のキーだと駄目です

マジで心当たりのある方、お願いいたします・・・
0450デフォルトの名無しさん2008/01/13(日) 02:10:22
階層上のすべてのコントロールでキーイベントとってみれば。
Spy+使ってどのハンドルにメッセージが来てるか見るとか。
0451デフォルトの名無しさん2008/01/13(日) 02:55:05
>自分もさっきフォームにテキストボックス1つのシンプルな配置でやってみましたが
>ちゃんと拾いますね・・・
解決糸口はここだよなぁ。上記の通りであれば、環境的な問題ではなく、何かのコントロールがジャマしてるんだろうか。
SplitContiner - TabControl - Panel - TextBox
となっているみたいだけど、
SplitContiner - TextBox
TabControl - TextBox
Panel - TextBox
みたいな感じで地道に試してみるしかないのかな?
0452デフォルトの名無しさん2008/01/13(日) 03:05:30
>>431のコードで
>>446の
下 Form - SplitContiner - TabControl - Panel - TextBox 上
の順にコントロール置いて試してみたが普通に全部拾えた。
FormのKeyDownが拾えなくなるってことは、どこかでFormのKeyPreviewをFalseにするようなコードが書かれてるのか?
TextBox自体のKeyDownはちゃんと発生しているのかな?
0453デフォルトの名無しさん2008/01/13(日) 04:35:40
ちょっと質問です。
VB.NETでDataTableオブジェクトとかが使用しているメモリ量を見たいんですが
タスクマネージャでは今一歩正確性に欠けるので(できれば)フレームワークなどの機能で計測できないでしょうか?
0454デフォルトの名無しさん2008/01/13(日) 04:44:57
CLRプロファイラじゃ駄目なん?
0455デフォルトの名無しさん2008/01/13(日) 04:50:17
>>454
早速のレスサンクスです!!!
ググってサイトみてみました

おそらくヒープメモリの割り当てサイズが知りたいのでまさにこれではないかと!!!!
ちょっと明日にでも使ってみます!!

助かりました ありがとうございました。
0456デフォルトの名無しさん2008/01/13(日) 05:06:02
>>449
俺もそうなった時があった。
MDIフォームの子フォームとして使ってたため
イベントがメニューのショートカットに持っていかれてた。
0457デフォルトの名無しさん2008/01/13(日) 19:46:44
すいません。くだらない質問だと思いますが、ご教授お願いします。


tabコントロールで特定ページに入ったとき、
既に生成されてるDataTableを元グラフを描画しようとしています。

そもそも、VBの挙動の根幹部分から分かっていないのですが、
特定タブに入った後に、ボタン等のイベントを拾って描画はできるのですが、
これだと、別のタブに移動した後に、再びこのページに戻ってくると、
再度ボタンを押して描画させなければなりません。
それだと面倒なので、特定ページに入ったときに描画させるようにしたいのですが、

Handles TabPages1.Click

だと早すぎるのか?描画がされて消えてしまうような感じですし、
どのイベントを拾えばいいのかが分かりません。

どなたかこの辺を勉強しろでも構いませんので、教えてください。
よろしくお願いします。

0458デフォルトの名無しさん2008/01/13(日) 19:50:07
ドトネトでは、というかWindowsでは描画はWM_PAINT(Paintイベント)で行うのが基本。
つまりその基本どおりにやるだけじゃないの?
04594572008/01/13(日) 20:11:46
>>458
やっぱAPIを知らなきゃ話にならないですよね・・・

もう一つだけ、たぶんこれも勉強しろって事なんでしょうけど
教えていただきたいのですが、

Private Sub TabControl1_SelectedIndexChanged( _
ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TabControl1.SelectedIndexChanged

MsgBox("test")
graph = New Graph(GraphArea, 100, 90)

End Sub

Graphクラスの初期化時に、グラフの背景を描画させているのですが、
TabControl1の選択時に、

MsgBox("test")と、ワンクッションおくと、きちんとグラフが描画されるのに、
これが無いと描画されないというのは、どういう原理なんですかね・・・?


もしよろしければ教えてください。お願いします。
0460デフォルトの名無しさん2008/01/13(日) 20:28:43
描画されないっていうか、描画されたあと上描きされてるんだよ。
何もないと
グラフ描画したあとペイントイベントで上描き(→描画されていないように見える)
メッセージボックスを表示すると、そこで処理がとまるからペイントイベント先行、その後グラフ描画
となるからグラフが表示される。
>>458の言うとおり、Paintのイベントハンドラ内でグラフ描画処理すべし
04614572008/01/13(日) 20:39:46
>>460
なるほど、そういう事ですか。
ご親切に教えていただきありがとうございました。

もう少し精進してきます
0462デフォルトの名無しさん2008/01/13(日) 20:44:24
ちゅかペイントのイベントハンドラで書かないと、フォームが重なったり隠れたりしたあと再描画されないからな(基本的に)。
まぁがんがれ(`・ω・´)!
0463デフォルトの名無しさん2008/01/14(月) 12:06:10
フォーム以外のところをクリックした時のマウスダウンイベントを取得するにはどうしたら
いいですか?このまえWM_NC**を使うということを聞いたのですが、マウスダウンのイベントが発生しないので困ってます
どなたか教えてください
0464デフォルトの名無しさん2008/01/14(月) 12:14:14
グローバルフック
04654312008/01/14(月) 14:49:18
>>456
まさにそのとおりでした。ありがとうございます。
MDI子フォームでいつの間にか標準のメニューが挿入されていて
Ctrl+A以外がバッチリ割り当てられていたのですが
MenuStripのVisibleをFalseにしてあるので全く気づきませんでした。
IDEのほうでショートカット割り当てられると割り当てたキーでは
同じキーイベントは拾えなくなるんですね。

レスいただいたみなさん、ありがとうございました。
0466デフォルトの名無しさん2008/01/14(月) 22:16:53
お世話になっております。

ttp://www.ideaxidea.com/archives/2007/10/windows_pc.html

こちらの記事の2番目のフォームのようなコントロールボックスを作成したいのですが、どういった方法があるでしょうか。
0467デフォルトの名無しさん2008/01/15(火) 00:55:29
>>431
MDI子フォームと書かずに解答を出せとは難問だったな。
原因と思しき場所を絞って質問するのもいいが、全体を教えてくれなきゃ想像付かん場合もある。
何であれ、解決してよかったが…。
0468デフォルトの名無しさん2008/01/15(火) 01:00:05
>>466
コントロールボックスってなんぞ?
2番目って
ttp://www.ideaxidea.com/archives/2007/10/14/mainte_2.gif
これかな?
これのどの部分を作りたいの?
0469デフォルトの名無しさん2008/01/15(火) 03:14:12
 
'.gif\P2P
r
0470デフォルトの名無しさん2008/01/15(火) 08:06:44
>>468
最小化、最大化、閉じるボタンの部分です
.NETのプロパティがControlBoxなのでそういう名称だと思っていましたが…
画像のようにデザインを変更したいのです
04714682008/01/15(火) 10:27:18
そういえばそういう名称だったねwww
なんか脳が溶けてました

これってVistaのUIで、別に自前でつくっているわけじゃないと思う。
別OSでそっくりにつくるなら、タイトルバー消して、ボタン配置して、画像用意するかVisualStyleRendererでボタンの外装作り変えて…って感じになるのかな。


0472デフォルトの名無しさん2008/01/15(火) 12:44:42
VistaのUIだと思ってダウンロードしたのですが、XPでもこのUIでした
タイトルバーを消してやってみます
ご教授ありがとうございました
0473デフォルトの名無しさん2008/01/15(火) 14:47:28
ProgressBarについて教えてください。これを マーキースタイルにして
そのスピードをMarqueeAnimationSpeedでセットすると、OSはXpですが
Valueを操作しなくても自動的に動いてくれるようになるでしょうか。
ためしにそれだけやったところでは動き出すようにはなりませんでしたが、
メソッドを何か叩くことでスタートするのでしょうか。何卒よろしくお願いします。
0474デフォルトの名無しさん2008/01/15(火) 14:55:40
Valueを操作しないで、何を持って100%だのなんだの感知させる?
0475デフォルトの名無しさん2008/01/15(火) 15:15:29
>>474
さっそくどうもです。MarqueeAnimationSpeed は何がどこまで動く
速度になるかがわかりませんでした。Valueを入れて動かすとします
とスピードの効果が出てくるのでしょうか。そこがわかりません。
0476デフォルトの名無しさん2008/01/15(火) 15:57:23
Marqeeは2003/Vistaでしかサポートしてなかったような希ガス
0477デフォルトの名無しさん2008/01/15(火) 15:59:37
Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003 プラットフォームメモ : Marquee スタイルはこれらのプラットフォームでのみサポートされています。
0478デフォルトの名無しさん2008/01/15(火) 16:22:21
クラシック表示にしてまいか?
0479デフォルトの名無しさん2008/01/15(火) 18:15:47
>>478
クラシック・スタイルではVisualStyleを使っていないので自動的には動かず
XpスタイルにすればVisualStyleを使っているので自動的に動くのでしょうか・・・。
どちらでも同じようにValueを与えないと動かないような・・・、それではもう一度
確認してみますです。
04804732008/01/15(火) 18:48:51
>>479
試してみましたら、きちんと動作していました。認識が違っていました。
バックグラウンドワーカーと併用したときに何か別の原因で動かなかった
のを間違って記憶していました、すみません・・・。

ただやってみますとやはりシングルスレッドで動かすと動きが早くなったり
遅くなったりして等速では動かないですね・・・、これはタイマーでValueを
操作しても同じでした。等速で動かすには別スレッドでコントロールを直接Value
を与えることができないと無理そうな感じでした、といってもそういうオブジェクト
をいじるとNGなのですよね??
0481デフォルトの名無しさん2008/01/15(火) 18:54:05
つうか裏でなんか重い処理してんだろ?
描画は多分優勢度低いから無理がある可能性が高い気がするよ。
0482デフォルトの名無しさん2008/01/15(火) 22:56:52
>>480
どうしても気になるならフリースレッドの処理に時々Thread.Sleep()入れてやれば
改善するんじゃない?

でもそんなことにこだわる意味があるのかな?
プログレスバーの意義はユーザーに処理がフリーズしてない安心感を与えることだろうから、
それさえできれば必要十分な気がするけど。
0483デフォルトの名無しさん2008/01/15(火) 23:12:39
>>481-482
>プログレスバーの意義はユーザーに処理がフリーズしてない安心感を与えること
わかりました。つっかえつっかえ動くような感じなのですが、それがプログラムの
作業によるのだということでこれでよしと考えました。ありがとうございました!
0484デフォルトの名無しさん2008/01/16(水) 02:33:54
>>483
裏で動いてる処理を何一つとして理解してないだろおまえ……
0485デフォルトの名無しさん2008/01/16(水) 09:58:17
質問です。ExplorerなどではHDD、CD-ROM、メモリースティック、
ネットワークドライブ、などの媒体をそれぞれ見分けてそのアイコンが表示されて
いました。

これというのはそれを示す何かのパラメータを見て行っているのだと思いますが、
このパラメータを取り込むためのクラスがありましたら教えてください。
0486デフォルトの名無しさん2008/01/16(水) 10:09:15
DriveInfo.DriveType
0487デフォルトの名無しさん2008/01/16(水) 10:13:54
>>486
おお、あるのですね!ありがとうございました!!調べてみます!!
0488デフォルトの名無しさん2008/01/16(水) 10:26:23
質問があります。

コンテナコントロールを派生させ子コントロールが置けるクライアント領域の範囲
を変更したいのですが、どのメソッドをオーバーライドすればいいのでしょうか?

例えば、コンテナコントロールの Width が 100 で Height が 200 ですと、
内部に子コントロールを配置してその Dock を Fill にすると、そのコントロールは
Width 100 Heidht 200 になりコンテナコントロール全体に広がりますが、
このコンテナコントロールのクライアント領域を変更し、若干余白を持たせるため
に既定で、上、下、左、右から 10 ピクセル程狭めたオリジナルのコントロールを
作成したいのです。
0489デフォルトの名無しさん2008/01/16(水) 10:32:17
させ子がいると聞いて飛んできました
0490デフォルトの名無しさん2008/01/16(水) 11:08:43
コンテナのプロパティになかったっけ?
0491デフォルトの名無しさん2008/01/16(水) 11:11:28
Paddingのことか
04924882008/01/16(水) 11:30:47
通常 Panel とかのコンテナコントロールのクライアント領域は、

横 0 〜 Width
縦 0 〜 Height

ですよね。

これを変更して周りに 10 ピクセル程クライアント領域として認めない領域を作った場合、

横 10 〜 Width - 10
縦 10 〜 Height - 10

になりますが、この場合 Padding の Left や Top が 0 の場合は、
クライアント領域の一番左上(10、10)になるようにしたいのです。
恐らく Control クラス辺りをメソッドなどをオーバーライドすれば
出来そうな予感がするのですが、わからないのです。
0493デフォルトの名無しさん2008/01/16(水) 11:44:38
VB VB.netのアルバイト情報
www.sfpac.com/
0494デフォルトの名無しさん2008/01/16(水) 12:01:25
怪しい
0495デフォルトの名無しさん2008/01/16(水) 12:06:18
面接官「特技はブラックジャックとありますが?」
学生 「はい。ブラックジャックです。」
面接官「ブラックジャックとは何のことですか?」
学生 「手術です。」
面接官「え、手術?」
学生 「はい。手術です。患者全員の足元を見て手術料をふんだくります。」
面接官「・・・で、そのブラックジャックは当社において働くうえで何のメリットがあるとお考えですか?」
学生 「はい。社員がケガしてもお金払えば治せます。」
面接官「いや、当社にはケガをするヤワな輩はいません。それに人のお金をふんだくるのは犯罪ですよね。」
学生 「でも、重症の足でも切断せずに治せますよ。」
面接官「いや、切断とかそういう問題じゃなくてですね・・・」
学生 「モグリなんですよ。」
面接官「ふざけないでください。それにモグリって何ですか。だいたい・・・」
学生 「医師免許を持っていな医師です。闇医者とも書きます。バレないコツは・・・」
面接官「聞いてません。帰って下さい。」
学生 「あれあれ?怒らせていいんですか?ふんだくりますよ。3000万円。」
面接官「いいですよ。ふんだくって下さい。おふくろの命が助かるなら3000万円くらい一生かかっても払います。」
学生 「その言葉が聞きたかった。」
面接官「先生・・・」
0496デフォルトの名無しさん2008/01/16(水) 12:21:09
Panelの中にPanel作ってやった方が早くね?
0497デフォルトの名無しさん2008/01/16(水) 13:55:22
>>496とほぼ同じ意見だが、それだと親のパネルにもコントロールが置けてしまうので、
UserControlの指定した位置((10,10)とか)にPanelを配置したコントロールをつくればいいんじゃない。
0498デフォルトの名無しさん2008/01/16(水) 14:51:37
いよいよ2月に2008が発売になると聞いたのですが、
2008で作ったソフトははVISTAで何も追加しなくとも
うごくのでしょうか?
NET3.5っていうことはNET3.0が入っているVISTA
ではダメということ?
これではいつになってもVB最新版で作ったソフトは
最新OSでは満足に動かないってことになるのでは?
だれかご存知の方いらっしゃいませんか
0499デフォルトの名無しさん2008/01/16(水) 14:54:35
心配無用
0500デフォルトの名無しさん2008/01/16(水) 16:03:25
2008なら.NET Frameworkのバージョンが選択できるから、心配なら3.0でやればいいじゃん。
どうせ中身2.0なんだし。
0501デフォルトの名無しさん2008/01/16(水) 16:30:54
Imageオブジェクトで、PNG形式のものをBMP形式に変換するメソッドとかは
どこかにあるでしょうか?
0502デフォルトの名無しさん2008/01/16(水) 16:52:24
Image.Save(String, ImageFormat)
0503デフォルトの名無しさん2008/01/16(水) 16:55:10
>>501
http://www.google.com/search?num=50&hl=ja&safe=off&as_qdr=all&q=image+save+%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88+-1%E5%9B%9E%E3%81%8F%E3%82%89%E3%81%84%E3%82%B0%E3%82%B0%E3%82%8C%E9%A6%AC%E9%B9%BF%EF%BC%81&lr=lang_ja
0504デフォルトの名無しさん2008/01/16(水) 17:53:02
>-1回くらいググれ馬鹿!
激しくワラタw
しかし、>>503もツンデレだなw
0505デフォルトの名無しさん2008/01/16(水) 20:13:24
>>488
何故4方にアンカー打てばいいだけの話を面倒にしようとしているのかね?
05064852008/01/17(木) 00:21:22
昨日 DriveInfo.DriveType の件、教えていただきありがとうございました。

CD-R をフロッピーと同じように読み書きできる B's Clip というソフト
を導入していました。このときに Explorer では、コンテキストメニューや
D&DなどによるCD-Rの読み書き、およびフォルダのリネームなどができました。

それで、Win32APIの SHFileOperation()でのコピーなどはできたのですが、
Explorerではできたフォルダのリネームを My.Computer.FileSystem.RenameDirectory()
でやってみたところ、これは書き込みができない旨のメッセージが出てきて
失敗していました。

また、Explorerでは「取り出し」というメニューがあってCD-Rを取り出しできました。

こうした特定のファイルやデバイスの操作をExplorerではできる場合、それを
なんらかの形でプログラムからもCD-Rドライブなどへの操作を可能にする
ためにはどんな方法をとるべきでしょう?どこかにそれ用のAPIなどがわかる
ようになるでしょうか?
0507デフォルトの名無しさん2008/01/17(木) 00:58:58
APIならこんなの使ってみれば?
ttp://support.microsoft.com/kb/165721/ja

別にこれじゃなくてもいろいろ出来ると思うけど
0508デフォルトの名無しさん2008/01/17(木) 01:03:27
>>506
COM経由でいけると思う
IShellFolder::SetNameOf とか IContextMenu.InvokeCommandとか。
知らんけど。

CDの取り出し自体はDeviceIoControlでできる
0509デフォルトの名無しさん2008/01/17(木) 01:04:13
>>506
そのCDドライブ上のファイル操作はB'sが
シェル拡張を仕掛けているからできるようになっている。

だから、SHFileOperationのようなシェルに対する操作はできるが、
My.Computer.FileSystemはシェルより下層の操作となるため、そのように失敗する。
ファイル操作に関してはSHFileOperationに限らずシェルの機能を使えばいけるはず。
05104852008/01/17(木) 07:30:59
>>507-509
ああ、こんなに早く多くの明解なご指導、感謝に堪えません。
Shell、IShellFolder、DeviceIoControl これらにトライしてみます!
ありがとうございました!
0511デフォルトの名無しさん2008/01/17(木) 17:32:29
質問です。
SqlDataReaderからデータを取得するとき、途中で安全に中断するにはどういうやり方が好ましいでしょうか?
0512デフォルトの名無しさん2008/01/17(木) 17:36:38
電源ボタンを長押しし、そっと目を閉じる。
0513デフォルトの名無しさん2008/01/17(木) 18:58:32
>>512
つぼった
0514デフォルトの名無しさん2008/01/18(金) 16:26:18
コントロール配列がまんどくさすぎる!!!!!!!!!
VB6以前のように、簡単にならんの?

マクロとか駆使すればVB6みたいに出来るかな?
簡単に実装できるマクロとか、どこかに落ちてないでしょうか・・・?

自分で作るしかないかな?
0515デフォルトの名無しさん2008/01/18(金) 16:39:44
またはじまった
0516デフォルトの名無しさん2008/01/18(金) 17:13:12
>>514
コントロール配列つくって何がしたいのさ?
0517デフォルトの名無しさん2008/01/18(金) 17:25:40
俺にもそう思っていた時がありました。
AddHandler ステートメントの存在を知るまでは。
0518デフォルトの名無しさん2008/01/18(金) 17:29:17
AddHandlerでいちいちイベントつくるのめんどくせぇー
0519デフォルトの名無しさん2008/01/18(金) 17:35:52
AddHandlerの面白さが解らないなんてVB.NETの半分を損してるよ。
05205142008/01/18(金) 17:46:11
>>519
まぢですかぁーっ!?
何か面白いワザがあるのだろうか・・・?
ただひたすら同じイベントに関連付けるだけじゃないの・・・?

とりあえずコレクションにして、
ちまちま作成してるんですが、
あまりにもめんどくさいので、
叫んでしまいました。

違うタイプのコントロールを、
同じ配列にしたりできたりするのは、便利だとはおもうが、
そんなことするのは稀だ。
0521デフォルトの名無しさん2008/01/18(金) 18:49:04
同一グループボックス内に2個のラジオボタンを配置しました。
このときのラジオボタンのCheckedプロパティを
アプリケーション設定に保存するにはどうすればよいでしょうか?
各々のラジオボタンのプロパティを保存するようにすると、動作に不具合が生じます。

あるサイトには一方のラジオボタンのプロパティのみを保存するように
とありましたので試してみたところ、確かに正常に動作するようになるのですが、
もう一方のラジオボタンのCheckedプロパティがTrueのときに終了すると、
次回起動時は双方のラジオボタンのCheckedプロパティがFalseとなってしまいます。

常套的な手段があるようでしたら教えてください。
0522デフォルトの名無しさん2008/01/18(金) 19:04:30
>>521
trueになってるラジオがどれであるか
これを保存(テキトーに番号かなんかで)

起動時には保存されている値に該当するラジオをtrueにする


以上
0523デフォルトの名無しさん2008/01/18(金) 19:46:57
>>521
GroupBox1 に張られているのが RadioButton のみって前提なら

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Name As String = GetSetting("MyApp", "GroupBox1", "Control", "")
If (Name = "") Then
Exit Sub
End If
Me.SuspendLayout()
For Each Control As RadioButton In GroupBox1.Controls()
If (Name = Control.Name) Then
Control.Checked = True
Exit For
End If
Next
Me.ResumeLayout(False)
End Sub

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
For Each Control As RadioButton In GroupBox1.Controls()
If (Control.Checked) Then
SaveSetting("MyApp", "GroupBox1", "Control", Control.Name)
Exit For
End If
Next
End Sub

でおk
0524デフォルトの名無しさん2008/01/18(金) 20:10:24
>>521
考え方として一番シンプルなのは、UIが表現している設定を
プライベートなプロパティとして持つことだと思うよ。例えばこんな感じ。

  Private Property YesSelected() As Boolean
    Get
      Return radYes.Checked
    End Get
    Set(ByVal value As Boolean)
      If value Then
        radYes.Checked = True
      Else
        radNo.Checked = True
      End If
    End Set
  End Property

でこれをMy.Settingなり何なりをつかって保存/復元すればいいわけだ。

あるいは手間を惜しまないなら、ラジオボタンの部分だけをカスタムコントロールにして
そいつに上に書いたようなプロパティを持たせればもっと分かりやすい。
05255212008/01/18(金) 20:34:12
>>522-524
どうもありがとうございます。とても参考になりました。
PropertyBindingを設定せず、INIファイルに書き出す要領でアプリケーション設定に保存しようと思います。
0526デフォルトの名無しさん2008/01/19(土) 00:15:16
iniwwwwwwwwwww
0527デフォルトの名無しさん2008/01/19(土) 01:46:34
>>516
クラスの上下関係やら壁をぶち破って、コントロールのプロパティを弄りたいのだと。
VB6で書いた小生の駄作プログラムがまさにそんな状況だったけど、然るべき
ハンドラを介せば、汚い横紙破りはしなくていい筈だ。
0528デフォルトの名無しさん2008/01/19(土) 02:04:34
VB脳にOOPは無理じゃないかと思うときがある
0529デフォルトの名無しさん2008/01/19(土) 02:13:46
まだコントロール配列とか言ってる人がいるのか。。。

まあ用途にもよるのは確かだろうけど、普通はコントロール配列のように
ユーザーによって操作されたコントロールをインデックスで識別したい場面っていうのは
そんなに多いはずがないと思うんで、たぶん基本的に何か勘違いした発想をしてるんだろうなあ。

どうでもいいが上の方でAddHandler使えとか言ってる人がいたが、
それはコントロール配列の代替方法と直接関係ないだろう。

ひとつのメソッドに複数のオブジェクトのイベントを紐付けするのはHandles句でもできる。
それにAddHandler使おうが、肝心のインデックスによる操作されたコントロールの識別が
できないことに変わりはない。

どうしてもそんなアナクロなことがしたければデザイナでTagに数字でも入れておいて

Dim index as Integer = CInt(DirectCast(sender, TextBox).Tag)

みたいにするのかなあ。

あと、VB.NETにも互換ライブラリに一応コントロール配列ってあるんだよね確か。
コントロール配列を使ってるVB6のコードを変換すると見られたはず。
0530デフォルトの名無しさん2008/01/19(土) 02:20:45
そもそもコントロール配列が必要になる理由がわからん…
なに作ってんの?
0531デフォルトの名無しさん2008/01/19(土) 02:22:30
なんだろう、大量のcheckboxを番号で管理してるとか・・・
0532デフォルトの名無しさん2008/01/19(土) 02:23:21
そういう人って「マインスイーパー作れ」って言われたら迷わずボタン並べ始めるんだろうな
0533デフォルトの名無しさん2008/01/19(土) 02:23:22
いやVB6な人の中には、同じ種類のコントロールが2つ以上存在すると
意味なくコントロール配列にしたがる人がいるんだよたぶん
0534デフォルトの名無しさん2008/01/19(土) 05:02:22
>>533
> 同じ種類のコントロール
別に,「CommandButtonがいっぱいある」,から「CommandButtonをコントロール配列化しよう」とは思わない.
「同じ用途(同じ目的)のコントロールがいっぱいある」,から「処理を一元管理しよう」とするとコントロール配列化が妥当という気になってくる.
それでもあんまりそういう場面に出くわさないんだけどな.

これがVB.NETであっても,「同じ用途のコントロールを一元管理しよう」という要求は依然としてあるから,
コントロールの配列とかコントロールの集合とか,またはイベントハンドラの複数のバインディングとかにしわ寄せ行ってる感じがするな.

VB.NETは共通言語基盤上でほかの言語ともお話する必要があるから,言語としてコントロール配列のサポートが無くなったと思っている.
0535デフォルトの名無しさん2008/01/19(土) 05:09:04
コントロール配列って.netでやるならコントロールの配列作ればいいだけじゃね?
0536デフォルトの名無しさん2008/01/19(土) 09:18:40
だが、そのコントロールの配列を
いちいち作るのがマンドクセー
それがVB6厨
既存コントロールを継承してカスタムコントロールつくって、
コレクションつくるのも、まんどくせー
それがVB6厨
0537デフォルトの名無しさん2008/01/19(土) 11:26:19
Controls("textBox" + i)よりはコントロール配列の方がマシな気はしないでもない
もっと綺麗な方法はいくらでもあるのはわかってるけど
0538デフォルトの名無しさん2008/01/19(土) 14:03:49
新規Zipフォルダの作成方法について教えてください。
エクスプローラでは新規ファイルの作成でZipフォルダが作れました。
これと同じことをしたい場合、レジストリでShellNewをみてみると、そこには
Dataが並んでいました。

HKEY_CLASSES_ROOT\.zip\CompressedFolder\ShellNew

これのDataの値はREG_BINARY型だったため、バイナリファイルを作成して
そこにその値を書き込んで保存しましたが、Zipフォルダにはなりませんでした。

作成する方法が知りたいのですが、何卒よろしくお願いします。
0539デフォルトの名無しさん2008/01/19(土) 14:48:37
>>538
タダのZipファイルだからZipファイル扱えるライブラリを使うとか,
ためしに作成してバイナリエディタで見て同じバイト配列を書き込むようにするとかでいいと思うよ
0540デフォルトの名無しさん2008/01/19(土) 15:10:30
>>538
VB6だがこんなの見つけた。
http://www.experts-exchange.com/Microsoft/Development/Q_22785365.html
0541デフォルトの名無しさん2008/01/19(土) 16:23:13
>>538
なるけど.zipにした?
0542デフォルトの名無しさん2008/01/19(土) 17:08:22
>>539-541
お世話になります!!

>>541
・・・そうでした。すみません。もしかしてそうかなと思いつつソース見直しつつ
おりました折、お答えくださったのを見て今試してみました、結果はバッチシ
ですた。すんませんです。助かりました、まことにどうもでした!!

ググってみるとZipfldr.dll などのファイル名が出ていたのでそれ使って
どうこうするのかと思ったりもしてましたらそういうことではなくて助かりました。

Zip がこれでできるということは、、このShellNewのDataがある拡張子の
ファイルやフォルダはすべてこれと同じようにして作成可能と考えてよい
でしょうか。
0543デフォルトの名無しさん2008/01/19(土) 17:43:11
VB2008 EEの自動保存を解除する方法を教えてください
ユーザー設定にもオプションにもそのようなものが見つかりません
0544デフォルトの名無しさん2008/01/19(土) 18:11:16
俺はVS2005スタンダードだから、2008EEでも同じかはわからないけど、ツール - オプションの全ての設定を表示にチェック入れた?
チェック入れたら、環境の自動バックアップでソースコードの自動バックアップしないようにできるけど。
2008からは変わったのかな…。
05455432008/01/19(土) 18:28:04
>>544
> 全ての設定を表示にチェック入れた?

入れてませんでした チェックしたら自動バックアップの項目が出てきました
これで自動保存を恐れることなく色々いじれます
単純ミスでした ありがとうございます 
0546デフォルトの名無しさん2008/01/20(日) 19:00:17
[DataDefモジュール]
(グローバル変数宣言部)
Public Sub InitializeData()
 この中で色々データの初期化を行う
End Sub

[MainFormモジュール(ユーザフォーム)]
Private Sub MainForm_Activate()

 ●DataDef.InitializeData

End Sub

Private Sub MainForm_Initialize()

 ●DataDef.InitializeData

End Sub

F5でデバッグを開始するとブレークを張ったMainForm_Activate()の中も
MainForm_Initialize()中でも停止せず、どうやらプロシージャ内に入ってないみたいなんですが、
ユーザフォームが起動した時に最初に行う処理はユーザフォームモジュールの
どのプロシージャにあるのでしょうか?
0547デフォルトの名無しさん2008/01/20(日) 19:02:10
Win32APIスレで訊いていたのですが、http://pc11.2ch.net/test/read.cgi/tech/1199514664/510
ちょっと教えていただけませんでした。もしご存知の方いらっしゃいましたらご指導をお願いします。

現在ファイルのプロパティを表示するために ShellExecuteEx を使っていました。そのとき、
通常のファイルやフォルダの場合ではOKだったのですが、たとえばブリーフケースのような特殊
なフォルダの場合、Explorer ではそれ用の専用のタブも追加されてプロパティダイアログが表示
されていました。それと同じように表示するためには、構造体 ShellExecuteInfo のメンバを
どのように指定すればよいでしょうか?現在のものはこれでした。

Dim info As New NativeMethods.SHELLEXECUTEINFO
With info
.cbSize = Marshal.SizeOf(info)
.fMask = NativeMethods.SEE_MASK_NOCLOSEPROCESS Or _
NativeMethods.SEE_MASK_INVOKEIDLIST Or _
NativeMethods.SEE_MASK_FLAG_NO_UI
.hWnd = Operation.hWndOfAppWindow
.lpFile = FilePath
.lpVerb = "properties"
.lpParameters = "\0"
.lpDirectory = "\0"
.nShow = 0
.hInstApp = IntPtr.Zero
.lpIDList = IntPtr.Zero
.lpClass = "\0"
.hkeyClass = IntPtr.Zero
.dwHotKey = 0
.hIcon = IntPtr.Zero
.hProcess = IntPtr.Zero
End With

この他に指定が必要な項目と値を知りたく、ご指導をお願いします!
0548デフォルトの名無しさん2008/01/20(日) 20:27:06
とりあえずSEE_MASK_NOCLOSEPROCESS と0とIntPtr.Zeroとヌル文字は設定する必要ないだろ

lpIDList試してみたら?
■ このスレッドは過去ログ倉庫に格納されています