人に聞けない痔の悩み、これでスッキリ >>

使用環境 VB2005 express です。
フォーム操作の中でDirListBoxとFileListBoxを使っています.
DirListBoxをクリックしてFileListBox内にファイル一覧を表示するのですが
表示するタイミングが遅く感じます. (PCの性能上ではなく)

(1)該当するフォームを一度選択してアクティブにします

(2)その次にもう一度選択してもファイル一覧が開かず
もう一度ダブルクリックします。

(3)つぎにもう一度選択して、中身のファイル一覧が見えます。

これが最短での操作になるのでしょうか?

今のところは下記 実行時で処理しています。
DirListBox1_SelectedValueChanged

下記も試してみましたが、あまり変わらないか、遅くなります。
DirListBox1_Change
DirListBox1_Click
DirListBox1_Validated

以上宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
リンク先の内容を参考にしたいと思います。
今後ともよろしくお願い致します。

お礼日時:2012/03/31 19:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB2005でフォルダ参照

VB2005を利用している初心者です;

Form上にフォルダ参照画面のコントロールを貼り付けたいのですが・・
その前にそんなコントロールは存在するのでしょうか;ディレクトリの参照のコントロールもform上に置きたいのですが・・

サイトを探したりヘルプを見たりしているのですが;探し方が悪いのでしょうか・・なかなか見つかりません;

あれば教えていただけないでしょうか?
なければ、対策などあれば教えていただけないでしょうか??

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

Aベストアンサー

>ごめん、手元にVB2005がなく、VB.NET2003なのですが、
気づきませんでした。こんなのあったんですね(汗
2.0でも対応していますし、手元のVB 2005でも存在を確認できています
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.folderbrowserdialog(VS.80).aspx

ただ、これも

>FolderBrowserDialog はモーダル ダイアログ ボックスです。このため、このダイアログ ボックスが表示されているときは、ユーザーがフォルダを選択するまでアプリケーションの他の機能は動作しません。

なので、

>Form上にフォルダ参照画面のコントロールを貼り付けたいのですが・・
その前にそんなコントロールは存在するのでしょうか;ディレクトリの参照のコントロールもform上に置きたいのですが・・

の意図するところによっては該当しないかもなあ・・・というのが正直な気持ちです(そのため、OpenFileDialogやSaveFileDialogの話を避けたのですが)

>ごめん、手元にVB2005がなく、VB.NET2003なのですが、
気づきませんでした。こんなのあったんですね(汗
2.0でも対応していますし、手元のVB 2005でも存在を確認できています
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.folderbrowserdialog(VS.80).aspx

ただ、これも

>FolderBrowserDialog はモーダル ダイアログ ボックスです。このため、このダイアログ ボックスが表示されているときは、ユーザーがフォルダを選択するまでアプリケーションの他の機能は動作しません。

なので...続きを読む

Qツリービューで、エクスプローラー風にフォルダを辿る

ツリービューで、エクスプローラー風にフォルダをたどるプログラムサンプル例を知りたいのですが、ご存知のかたはいらっしゃいませんでしょうか。
Visual Basic 2010 Express Edition を利用しています。

参考書を何冊も読みましたが、ドライブやフォルダ情報を得ても、どうやってそれらをノードにしたら良いのか、よくわかりませんでした。

VisualBasic中学校のサンプルではややこしすぎる上、エラーが発生しました。
よろしくお願いいたいします。

Aベストアンサー

どこまで「真面目に」やりたいかにもよりますが……。

本当に真面目にやるなら,フォルダはディレクトリではないため,
MSDN) SHGetFolderLocation function
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762180.aspx
を起点に
MSDN) SHCreateItemFromIDList function
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762133.aspx
でIShellItemを得て,それからフォルダやファイル等を列挙していくか,
ツリービューを諦めて
MSDN) INameSpaceTreeControl interface
http://msdn.microsoft.com/en-us/library/windows/desktop/bb761630.aspx
を使うか,となります。
# 私は後者をC#でやろうとしてP/Invokeの宣言だけで諦めました……。


Visual Basic 中学校のサンプルというのは,
Site) VB サンプル集 - VB2010, VB2008, VB2005, VB.NET2003, VB.NET2002
http://homepage1.nifty.com/rucio/main/dotnet/Samples/SmpleCnt.htm
にある,
Site) VB フォルダツリー
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample081FolderTree.htm
のことでしょうか。
非常にコンパクトなサンプルだと思いますが。
・何が分からなかったのでしょうか
・エラーとはどういうエラーでしょうか (例外であれば,その型とエラーメッセージ)
# Visual Basic 中学校には質問用の掲示板があるのですけれどね……。

どこまで「真面目に」やりたいかにもよりますが……。

本当に真面目にやるなら,フォルダはディレクトリではないため,
MSDN) SHGetFolderLocation function
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762180.aspx
を起点に
MSDN) SHCreateItemFromIDList function
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762133.aspx
でIShellItemを得て,それからフォルダやファイル等を列挙していくか,
ツリービューを諦めて
MSDN) INameSpaceTreeControl interface
http://msdn.micros...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QVB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、
「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?

Aベストアンサー

思いっきり、例文に「COM1」と書いてますが、USBに書き換えてくださいね^^;

それとふと思ったのですが
udtReaderWriterModeWithoutEncryption
変数は構造体ですよね?

メンバが
lngPortName
lngBardRate
というのは、型宣言をINTEGERに変換してますよね?

ちょっとばかり不安に思ったので、追記しておきました。

参考URL:http://okweb.jp/kotaeru.php3?q=1257613

QVB.NETで他のプロジェクトで作成したフォームを使う方法

こんにちは。
VB.NETのプロジェクトがぐちゃぐちゃで参照設定とかいろんなの呼んでしまっているので、新しく作成しなおしたいのですが、
新しいプロジェクトでプロジェクトを作成し、前のプロジェクトで必要なファイル(.vb、RESX)を新しいプロジェクトのフォルダにコピーしたのですが、
普通のモジュールは追加>新しい項目の追加でなんとか追加できたのですが、フォームの追加の仕方がわかりません><教えてくださいー

P.S. RESXファイルってフォームのデータが入ってるのでしょうか?そんな気がしてコピーしたのですが。

※VB6.0からVB.NETに以降した際にアップデート情報みたいなのがプログラム上にくっついてしまって.vbファイルも参照項目も増えまくってしまった

Aベストアンサー

ドラッグ&ドロップが使いやすい。
Windowsのエクスプローラでvbファイルをドラッグして、VS.NETのソリューションエクスプローラへドロップする。

QVB.netでのライン描画方法がわかりません

VB6.0にて作成していたソースプログラムを.netアップグレードウィザードによりアップグレードして.netソースを作成しました。VB6.0ではPictureBox.Lineを利用してラインの描画をできていたようなのですが、.netにはLineメソッドが用意されていないらしくライン描画をどう行なえば良いかがわかりません。またVB6.0ではPictureBoxだったコントロールがアップグレードウィザードにて変換された後はPanelコントロールになってしまっています。
.netにもPictureBoxはあるのになぜPanelコントロールに置き換わってしまうのでしょうか?
いま現在やりたいのは、あるファイルより取得したデータを用いて、VB.netのコントロール(Panel? PictureBox?)にライン描画をさせてやりたいのです。
あまり難しいことは出来ませんので簡単に描画する方法をわかる方がいましたら教えて頂けませんか?
よろしくお願いします。

Aベストアンサー

こんばんは。

http://dobon.net/vb/dotnet/#graphics
こちらに図形描画の方法が色々とあります。参考にどうぞ。

QVB6からVB2010への変換について

今、WindowsXP上のVB6プログラムを、Windows7上のVB2010プログラムへ変換作業をしています

手順は
1.VB2008Expressのアップグレードウィザードを使って、一度VB2008版を造りました
  その時に、フォームサイズを変えるステートメントが次のように変わりました

Imports VB = Microsoft.VisualBasic

Me.Width = 16000 → VB6.TwipsToPixelsX(16000)
Me.Height = 12250 → VB6.TwipsToPixelsY(12250)

2.次にWindows7上のVB2010で上記プログラムを読み込むと.
 
    VB6.TwipsToPixelsX(16000) のところに波型のアンダーラインが引かれ
    これは「旧形式です」のメッセージが出ました

 そこで、Microsoftのフォームページ(http://go.microsoft.com/fwlin/?linkid=160862')を参考に
下記のように修正しました

Imports Microsoft.VisualBasic.Compatibility.VB6

Me.Width = Support.TwipsToPixelsX(16000)
Me.Height = Support.TwipsToPixelsY(12250)
  
   と修正しましたが波型アンダーラインは消えませんでした

そこで質問ですが
 この波型アンダーラインは無視して良いのか、
 それともまだ使い方が間違っているのか分かりません
 そこのところご教授願えれば幸いです

  

今、WindowsXP上のVB6プログラムを、Windows7上のVB2010プログラムへ変換作業をしています

手順は
1.VB2008Expressのアップグレードウィザードを使って、一度VB2008版を造りました
  その時に、フォームサイズを変えるステートメントが次のように変わりました

Imports VB = Microsoft.VisualBasic

Me.Width = 16000 → VB6.TwipsToPixelsX(16000)
Me.Height = 12250 → VB6.TwipsToPixelsY(12250)

2.次にWindows7上のVB2010で上記プログラムを読み込むと.
 
   ...続きを読む

Aベストアンサー

VB6.0 では、ScaleMode(座標系の単位)は、twip 単位で、.NET 系は、pixel 単位です。
従って、Me.Width = 16000 の 16000 をtwip → pixel に変換してやればいいだけの事です。
元々Form のサイズの設定部分のコードなので、開発環境でデザイン時に Form のサイズを設定して
貴方が求めるサイズに書き換えてやるべきかと思います。
(元々サイズを直にコードで指定しているのだから)

twip → pixel に単位変換するには、簡易的には、一般的な環境では、16000 / 15 で求める事が
できます。
正確には、環境を考慮して係数を求めて変換する必要があります。


>そこで質問ですが
> この波型アンダーラインは無視して良いのか、
の件ですが、エラーメッセージの通りで、使用できますが、暫定的な方法なので、どうするかは
貴方が決める事かと思います。

VB6.0 のコードを VB2008等へ移行する場合は、アップグレードウィザードで全面的に変換すると、
一般的なコードは問題ないのですが、グラフィックや印刷関係等多くの部分で変換しきれないものが
多くでてきて、中には上記のように中間言語のような扱いで変換される場合があり、お勧めできません
後々の事を考えたら、変換結果等を参考に一から書き直す事が一番かと思います。
(変換結果のプロジェクトは、使用しないで、新規に作成したプロジェクトで作成の事)

VB6.0 のコードを VB.NET 系に移行するには下記等が参考になるかと。

Visual Basic 6.0 ユーザーのための Visual Basic .NET 移行ガイド
http://msdn.microsoft.com/ja-jp/library/dd314356.aspx

VB6.0 では、ScaleMode(座標系の単位)は、twip 単位で、.NET 系は、pixel 単位です。
従って、Me.Width = 16000 の 16000 をtwip → pixel に変換してやればいいだけの事です。
元々Form のサイズの設定部分のコードなので、開発環境でデザイン時に Form のサイズを設定して
貴方が求めるサイズに書き換えてやるべきかと思います。
(元々サイズを直にコードで指定しているのだから)

twip → pixel に単位変換するには、簡易的には、一般的な環境では、16000 / 15 で求める事が
できます。
正確には、環境...続きを読む

Qツリービューを使って、エクスプローラのようなものを作りたい。

タイトルの通りです。VBで、Windowsのエクスプローラのような物を作り、それでファイルを選択したいのですがその作り方が分かりません。

任意の場所から、その最下層までのファイル名やフォルダ名を取得し、それをツリービューに表示させてエクスプローラのようなものを作りたいのです。

どなたか分かる方がおりましたら、お教えください。

Aベストアンサー

今(結構時間が掛かりましたが)、作ったばかりなのでバグがあるかもしれません。参考程度にして下さい。
[TreeView]コントロールと[ImageList]コントロールを作成し(この部分の操作説明はいいですね?)

以下のコードを貼り付けて「編集」→「置換」で
[完全に一致する単語だけを検索する]をチェックして
全角[_]を[半角スペース]に置換して下さい。(1963個の文字を置換しています)
(せっかく入れ子にしているのに、スペースがつまってしまうため[_]に変換しました)

Option Explicit

Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE =_-1
Private Const ERROR_NO_MORE_FILES = 18&

Private Type FILETIME
_______ dwLowDateTime As Long
_______ dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
_______ dwFileAttributes As Long
_______ ftCreationTime As FILETIME
_______ ftLastAccessTime As FILETIME
_______ ftLastWriteTime As FILETIME
_______ nFileSizeHigh As Long
_______ nFileSizeLow As Long
_______ dwReserved0 As Long
_______ dwReserved1 As Long
_______ cFileName As String * MAX_PATH
_______ cAlternate As String * 14
End Type
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA"_(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function FindClose Lib "kernel32"_(ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA"_(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA"_(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Private Usr_Path As String _______'任意のフォルダ #Ver2
Private Sub Form_Load()
___ Dim s As String
___ Dim t As String
___ Dim n&
___ Dim key As Integer
____
____'イメージリストコントロールにアイコンを割り付ける
___ With ImageList1
________.ImageHeight = 16
________.ImageWidth = 16
_______ With .ListImages
____________.Add 1,_"Open", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Openfold.ico")
____________.Add 1,_"Close", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Clsdfold.ico")
____________.Add 1,_"Drive", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Drive.ico")
____________.Add 1,_"CD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Cddrive.ico")
____________.Add 1,_"FD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\35floppy.ico")
____________.Add 1,_"525FD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\525flop1.ico")
____________.Add 1,_"Rec", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Waste.ico")
____________.Add 1,_"Desk", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Desktop.ico")
_______ End With
___ End With
___ TreeView1.ImageList = ImageList1

____'TreeViewコントロールにドライブを表示
'#2 __ key = 0
'#2 __ TreeView1.Nodes.Add ,_,_"rt",_"デスクトップ",_"Desk"
____
'#2 __ s$ = String$(2048, 0)
'#2 __ Call GetLogicalDriveStrings(2047, s$)__'ドライブを取得
'#2 __ Do
'#2 ______ n = InStr(s$, Chr$(0))
'#2 ______ If n > 1 Then
________
'#2 __________ key = key + 1
'#2 __________ TreeView1.Nodes.Add "rt", tvwChild,_"a-" & CStr(key),_"(" & Left$(s$, n - 2) & ")",_"Drive"
'#2 __________ TreeView1.Nodes.Item("a-" & CStr(key)).Sorted = True
____________'全てのフォルダを取得すると表示までに時間が掛かるので却下
____________'Folder_Serch Left$(s$, n - 2),_"a-" & CStr(key)

'#2 __________ s$ = Mid$(s$, n + 1)
'#2 ______ End If
'#2 __ Loop Until n <= 1
___ Usr_Path =_"c:\Windows"_____'#2
___ TreeView1.Nodes.Add ,_,_"a", Usr_Path,_"Close"
___ TreeView1.Nodes.Item("a").Sorted = True
___ Folder_Serch Usr_Path,_"a"__'#2
____
___ TreeView1.BorderStyle = ccNone
End Sub

Private Sub TreeView1_Collapse(ByVal Node As MSComctlLib.Node)
____'TreeView1の開いたフォルダのイメージを変更
___ If (Node.Image =_"Open") Then _'Drive等のイメージを変更しないように
_______ Node.Image =_"Close"
___ End If
End Sub

Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
____'TreeView1の閉じたフォルダのイメージを変更
___ If (Node.Image =_"Close") Then 'Drive等のイメージを変更しないように
_______ Node.Image =_"Open"
___ End If
____'下位フォルダの取得
___ Folder_Next_Search Node
End Sub
Sub Folder_Serch(fo, key1)
___ Dim hFF _ As Long
___ Dim FData As WIN32_FIND_DATA
___ Dim key _ As Integer
___ Dim ret _ As Long
___ Dim n ___ As Integer
___ Dim t ___ As String
____
___ key = 0
________
___ hFF = FindFirstFile(fo & "\*.*", FData)___'下位ファイル(フォルダ)検索(エラーでない場合検索ハンドルが返る)
______________________________________________'___________ この関数はファイルも取得する
___ If (hFF <> INVALID_HANDLE_VALUE) Then ____'エラーでない場合
_______ ret = 1
_______ Do While (ret <> 0)
___________ If (FData.dwFileAttributes = 16) Then _'フォルダならば
________________'フォルダ名は260文字分の領域があり、名前の後ろにChr(0)をつけて返すので
________________'________________________________ Chr(0)までの文字を取得
_______________ n = InStr(FData.cFileName, Chr$(0))
_______________ If n > 1 Then
___________________ t = Left$(FData.cFileName, n - 1)
_______________ Else
___________________ t = FData.cFileName
_______________ End If
_______________ If (t <>_"." And t <>_"..") Then
___________________ key = key + 1
____________________'カレントフォルダと親フォルダでなければ(表現が違うかも)
____________________'__________ TreeViewに追加
___________________ TreeView1.Nodes.Add key1, tvwChild, key1 & "-" & CStr(key), t,_"Close"
___________________ TreeView1.Nodes.Item(key1 & "-" & CStr(key)).Sorted = True
____________________'全てのフォルダを取得すると表示までに時間が掛かるので却下
____________________'Folder_Serch fo & "\" & t, key1 & "-" & CStr(key)
_______________ End If
___________ End If
___________ ret = FindNextFile(hFF, FData)___'次のファイル(フォルダ)を検索
_______ Loop
___ End If
___ ret = FindClose(hFF)
End Sub

Sub Folder_Next_Search(Nd As Node)
___ Dim s _ As String
___ Dim K() As String
___ Dim ki As String
___ Dim pa As String
___ Dim n _ As Integer
___ Dim i _ As Integer
____
____'With TreeView1.SelectedItem
___ With Nd
_______ If (.Children > 0) Then _'1つ下のフォルダがあれば
___________ n =_.Child.Index
___________ Do
_______________ If (TreeView1.Nodes(n).Children = 0) Then '2つ下のフォルダがなければ
____________________'Key:a?-?-?(?:は数字で連番)
____________________'(a:) a-1
____________________'(c:) a-2
____________________'_ ┗ Windows a-2-1
____________________'のように下位フォルダのキーは[上位フォルダ]_+_"-"_+_[連番]
____________________'に設定してあるのでKeyを元に下位フォルダのフルパスを取得
___________________ s = TreeView1.Nodes(n).key
___________________ K = Split(s,_"-")___________________'[-]で分けてK配列へ格納
'#2 __________________ ki = K(0) & "-" & K(1)______________'a-?はドライブ
'#2 ___________________'ドライブ情報の()を削除
'#2 __________________ pa = Replace(TreeView1.Nodes.Item(ki).Text,_"(",_"")
'#2 __________________ pa = Replace(pa,_")",_"")
'#2 __________________ For i = 2 To UBound(K)
'#2 ______________________ ki = ki & "-" & K(i)
___________________ pa =_""______________________'#2
___________________ For i = 0 To UBound(K)_______'#2
_______________________ If (i = 0) Then _________'#2
___________________________ ki = K(i)____________'#2
_______________________ Else ____________________'#2
___________________________ ki = ki & "-" & K(i)_'#2
___________________________ pa = pa & "\"________'#2
_______________________ End If
'#2 ______________________ pa = pa & "\" & TreeView1.Nodes.Item(ki).Text
_______________________ pa = pa & TreeView1.Nodes.Item(ki).Text _'#2
___________________ Next i
___________________ Folder_Serch pa, s _________________'2つ下のフォルダ取得
____________________'変数 N が子ノードの末尾の項目のインデックスになるまで、次の項目の文字列を取得
___________________ If (n =_.Child.LastSibling.Index) Then
_______________________ Exit Do
___________________ End If
____________________'変数 N を次の項目のインデックスに再設定
___________________ n = TreeView1.Nodes(n).Next.Index
_______________ Else _____________________________________'ある場合には、取得済みなので処理を終了
___________________ Exit Do
_______________ End If
___________ Loop
_______ End If
___ End With
End Sub

*******************************************************
ソースの中になるべく説明を書きましたが、表示に時間が掛かるので、一度にすべて登録せず、
フォルダを開いてから、次の検索をしています。
#2と書かれているコメントの部分は、最初見た時に、エクスプローラを作るという部分で作り始めてしまった為、
任意の場所を見落としてしまい、デスクトップから表示にしてしまいました。
・・・ということで#2の部分で訂正してあります。
(消すのがもったいなくて・・でもこの辺はかなり強引)

私も初めて作りましたので、おかしな所もあると思いますが、あくまで参考程度でお願いします。
何かおかしかったら補足してください。
あと、ListImageのアイコンは私のパソコンではそこに入っていましたが、無いかもしれませんし、
違う場所かもしれません。(探してみてください)
右側のファイル名表示の方は、どのコントロールで表示するかわかりませんでしので、
作っていません。また、質問があれば作ってみようと思います。
かなり長くなってすみません。お役に立てればと思います。

今(結構時間が掛かりましたが)、作ったばかりなのでバグがあるかもしれません。参考程度にして下さい。
[TreeView]コントロールと[ImageList]コントロールを作成し(この部分の操作説明はいいですね?)

以下のコードを貼り付けて「編集」→「置換」で
[完全に一致する単語だけを検索する]をチェックして
全角[_]を[半角スペース]に置換して下さい。(1963個の文字を置換しています)
(せっかく入れ子にしているのに、スペースがつまってしまうため[_]に変換しました)

Option Explicit

Privat...続きを読む

QFORMが開いているかどうかの確認方法

初歩の初歩だと思いますが。。。。

formが開いているかどうかの確認方法を教えてください。プロパティで確認できるのでしょうか?

Aベストアンサー

Form.Visible = True : 表示されている
Form.Visible = False : 表示されていない

でいいと思いますよ~

それとも二重起動禁止の方が知りたいんでしょうか?

Qコントロール配列と同じような扱い方

TextBox1、TextBox2、TextBox3・・・・TextBox10 と10個のテキストボックスにVB6で使っていたコントロール配列と同じような処理の仕方をコードで教えていただけませんか。

for i=0 to 9
TextBox(i).Text=i
next i

上記のコードをVB.NETで書くとすれば、どのように書けばいいかということさえわかれば、なんとか頑張れる気がします。

Aベストアンサー

VB.NETに「コントロール配列」は無いので、基本的にはできません。

やるとしたら、
「VB6で普通の(コントロール配列でない)コントロールを『コントロール配列』と同じように扱う」
場合と同じです。

つまり・・・
(方法1)自分でコントトール型の配列を宣言し、各コントロールをセットしておく。
(方法2)Controlsコレクションから参照する。
のどちらかでしょう。

前者なら例えば、
-------------------------------------------------------
Private TextBoxArray() As TextBox
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TextBoxArray = New TextBox() {Me.TextBox1, Me.TextBox2, Me.TextBox3}
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
For i = 0 To 2
TextBoxArray(i).Text = i.ToString
Next
End Sub
-------------------------------------------------------
こんな感じ、後者なら、
-------------------------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim i As Integer
For i = 1 To 3
Me.Controls("TextBox" & i.ToString).Text = i.ToString
Next
End Sub
-------------------------------------------------------
こんな感じ。

VB.NETに「コントロール配列」は無いので、基本的にはできません。

やるとしたら、
「VB6で普通の(コントロール配列でない)コントロールを『コントロール配列』と同じように扱う」
場合と同じです。

つまり・・・
(方法1)自分でコントトール型の配列を宣言し、各コントロールをセットしておく。
(方法2)Controlsコレクションから参照する。
のどちらかでしょう。

前者なら例えば、
-------------------------------------------------------
Private TextBoxArray() As TextBox
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング