フォルダ格納アプリ【Windowsフォームアプリケーション】
WindowsFormアプリケーションでフォルダやファイルをボタンに設定して
ボタンを押すと、指定したフォルダやファイルを設定し、設定後はそのフォルダを開くことができるアプリを作成。
作成はVisualBasicのWindowsフォームアプリケーションで作成していきます。
STEP1 機能別にページを分ける
最初はフォルダ、ファイル、Webページを格納する仕組みをつくっていきます。
といってもファイルが実際に入るわけではなく、ファイルの場所とファイル名を取得して
ボタンとラベルのテキストに設定します。
最初に、アプリをファイルとフォルダ、Webサイトを開く3つのページに分けたいのでTabControlを設置します。
タブのぺージが2つしかないので、3つに増やすために、追加したTabControlを選択して
プロパティウインドウからTabPagesの項目(右端の...のボタン)を押します。
タブは現状2個しかないので、TabPageコレクションエディターが開いたら
下の追加ボタンを押して、Tabを追加します。
追加、削除でタブページを増やしたり減らしたりできます。
タブを3つに設定したら、今回作成するのは
「フォルダ」「ファイル」「Webページ」の3つを開くことができるようにしたいので
各TabPageのプロパティ(右側欄)のTextプロパティを変更します。
各TabPageのTextがフォルダ・ファイル・Webページと設定してOKボタンを押し
変更した内容に変わっていれば上手く変更ができています。
ここから、各ページの機能を作成していきましょう。
STEP2 フォルダを格納・開く仕組みをつくる
最初に「フォルダ」のタブにボタンとラベルを1つずつ設置します。
ボタンのテキストは削除し、ラベルのテキストは未設定とします。
仕組みは今から作りますが、ラベルが未設定の場合はフォルダのパスを格納する
設定済みの場合はラベルが未設定ではないので、そのパスを開くという形をとります。
ボタンをクリックしたら起動する命令を作成しましょう。
ボタンを選択した状態で、プロパティのイベントのClickをダブルクリックして
Button1用のClickの命令を作成します。
そしてIFを使用して、ラベルが未設定の場合はフォルダを作成するように条件分岐処理を行います。
最初にフォルダブラウザダイアログの新しいインスタンスをdialogという変数に設定します。
Usingを使用しているのでEnd Usingで解放される形になります。
UsingからEnd Usingでフォルダブラウザダイアログの操作を行っていきます。
ダイアログを表示する前に設定として、説明文をDescriptionで指定します。
表示させる説明文は「フォルダを選択してください」とします。
早速ダイアログを表示してユーザーに操作してもらいたいところなのですが
ShowDialogで表示した際に、フォルダを選択してOKを押してくれたらすんなりいきますが
キャンセルをした場合も考慮して、ここでもIfを使用します。
ダイアログボックスでOKを押した場合はDialogResult.OKで取得できるので
結果がOKの場合はIfの中のTrueの処理が行われます。
選択したフォルダパスはdialogのSelectedPathで取得が可能です。
そしてSystem.IO.Path.GetFileNameメソッドでフォルダ名の部分だけ取得できるので
ボタンにはフォルダの名前だけ設定します。
一旦テスト実行してみましょう。
ボタンを押したら、フォルダブラウザダイアログが開きます。
設定したいフォルダを選択してOKボタンを押します。
今回はダウンロードフォルダを試しに設定します。
そうすると、ラベルには場所も含めた選択したフォルダが設定され
ボタンのテキストには場所を含めないフォルダ名のみが設定されます。
ここまででボタンとラベルにフォルダを設定する仕組みは完成です。
後は、このボタンをクリックしたらそのフォルダを開くように設定します。
最初のラベルが未設定であればのIf文のElse側を作ります。
Elseはラベルが未設定でない場合の処理なのでフォルダを開く処理を記述します。
Process.Startメソッドで指定したファイルの名前で起動してくれます。
設定されているボタンを押すと、ダウンロードフォルダが設定されているので
Process.Startでダウンロードフォルダが開きます。
ここまででフォルダを格納・開く仕組みはできました。
ここまでのサンプルコード-------------------------------------------
Public Class Form1
'Button1をクリックしたときに実行される命令
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'ラベルが未設定であればフォルダを設定する
If Label1.Text = "未設定" Then
'フォルダブラウザダイアログ゙の新しいインスタンスをdialogに設定
Using dialog As New FolderBrowserDialog()
'説明文の指定
dialog.Description = "フォルダを選択してください"
'ダイアログボックスを表示し、OKを押した場合の処理
If dialog.ShowDialog() = DialogResult.OK Then
'選択したフォルダパスをラベルのテキストに設定
Label1.Text = dialog.SelectedPath
'ボタンにフォルダ名だけ取得して設定
Button1.Text = System.IO.Path.GetFileName(dialog.SelectedPath)
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるフォルダを開く
Process.Start(Label1.Text)
End If
End Sub
End Class
-------------------------------------------------------------------------
ただこの状態だと、設定することはできても、RESETする仕組みがない為
一度設定したフォルダのままになってしまいます。
その為、RESETする用のButtonコントロールを追加して、RESET機能を搭載します。
Formの下の方にButtonControlを追加し、TextをRESETとします。
同様にClickイベントでボタンをクリックしたら命令をする仕組みにします。
Button2_Clickの中にラベルとボタンのテキストを元に戻す命令を記述します。
Label1のTextプロパティを未設定、Button1.Textプロパティは削除ですので""で何もなしにしてあげます。
そうすると設定した後に、RESETボタンを押すと、内容がクリアされます。
これで、また再度フォルダを設定することが可能です。
Property Binding設定
設定したフォルダはフォームを再起動すると、初期化されてしまうのでBinding設定を行います。
Buttonを選択して、PropertyBindingの設定を行います。
右端にある「...」のボタンを押下します。
プロパティをアプリケーションにバインドするの中からTextを選択し新規を押下します。
NameにB1として、OKボタンを押します。
そうすることで、B1という名前の設定でTextの値が保持されます。
ScopeはUserになっている為、別のUserの場合は保持されません。
Label1も同じように設定します。
同様に、Text新規でL1と名前を付けて設定します。
これで一度フォルダ設定後、再度フォームを起動しても、元々あった設定が残ります。
フォームを起動するたびにフォルダを設定していては便利ではないですよね。
Binding設定は便利なのでよく使用します。
STEP3 ファイルを格納・開く仕組みをつくる
次にフォルダではなく、ファイルを格納・開く仕組みをつくります。
フォームのタブはファイルを開いて、ボタンとラベルを同じように追加します。
ここはフォルダのタブと同じように設定します。
ファイルタブを選択して、その上に設定していきます。
Buttonとラベルの設置ができたら、同じようにTextをButton3は削除し
Label2は未設定、Button4はRESETと設定しましょう。
ここまでできたら、Button3のClickイベントを記述していきます。
Button3を選択して、イベント(雷マーク)を選択して、Clickの項目をダブルクリック。
Button3_Clickが入り、Button3がクリックされたら実行される命令が作成できます。
フォルダとファイルの設定はほとんど同じなので、先程作成したフォルダのコードをコピーしてこの中に入れます。
コピーしたらButton3_Clickの中に貼り付けて。
ここから変更していきます。
まずラベルの名前がフォルダの箇所のラベルはLabel2ですので
フォルダのラベル用にコードも改変します。
最初のラベルが未設定であれば、フォルダを設定するの部分です。
ここをLabel1からLabel2に変更して、今回はフォルダではなく、ファイルなのでコメントもファイルに変更します。
開く部分もLabel1ではないのでLabel2に変更します。
ここまでのサンプルコード
--------------------------------------------------------------------------------
Public Class Form1
'Button1をクリックしたときに実行される命令
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'ラベルが未設定であればフォルダを設定する
If Label1.Text = "未設定" Then
'フォルダブラウザダイアログ゙の新しいインスタンスをdialogに設定
Using dialog As New FolderBrowserDialog()
'説明文の指定
dialog.Description = "フォルダを選択してください"
'ダイアログボックスを表示し、OKを押した場合の処理
If dialog.ShowDialog() = DialogResult.OK Then
'選択したフォルダパスをラベルのテキストに設定
Label1.Text = dialog.SelectedPath
'ボタンにフォルダ名だけ取得して設定
Button1.Text = System.IO.Path.GetFileName(dialog.SelectedPath)
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるフォルダを開く
Process.Start(Label1.Text)
End If
End Sub
'Button2をクリックしたら実行される命令
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'ラベルとテキストを元に戻す
Label1.Text = "未設定"
Button1.Text = ""
End Sub
'Button3がクリックされたら実行される命令
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'ラベルが未設定であればファイルを設定する
If Label2.Text = "未設定" Then
'フォルダブラウザダイアログ゙の新しいインスタンスをdialogに設定
Using dialog As New FolderBrowserDialog()
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるファイルを開く
Process.Start(Label2.Text)
End If
End Sub
End Class
--------------------------------------------------------------------------------
そして、フォルダの場合はFolderBrowserDialogでしたが
ファイルの場合はOpenFileDialogを使用します。
Usingで設定する部分を変更しましょう。
これで、フォルダではなく、ファイルのダイアログが設定できました。
Usingの中の部分はFolderDialogとFileDialogではメソッドが違う為、一度削除しています。
最初にダイアログに表示するタイトルを設定します。
ファイルですので、ファイルを選択してくださいとします。
フォルダの時と同様に、ダイアログでOKを押したらというIf文を使用します。
SafeFileNameはファイル名のみを、FileNameで場所も含むファイル名を取得できます。
選択したファイル名のみをボタンのテキストに入れ、ラベルにはフルパスを入れます。
Button4のRESETボタンもこの設定された項目を削除できるように
イベントのClickを設定します。
これでファイル側も、ボタンをクリックしたらファイルを選択し、格納。
格納されたらボタンを押すとファイルを開くことができるようになりました。
ボタンを押したらファイアダイアログが開きファイルを選択します。
選択したファイル名がボタンのテキストに入り、ラベルにフルパスが入ります。
再度ボタンをクリックすると、格納したファイルが開きます。
ここまでのサンプルコード
----------------------------------------------------------------------------------------
Public Class Form1
'Button1をクリックしたときに実行される命令
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'ラベルが未設定であればフォルダを設定する
If Label1.Text = "未設定" Then
'フォルダブラウザダイアログ゙の新しいインスタンスをdialogに設定
Using dialog As New FolderBrowserDialog()
'説明文の指定
dialog.Description = "フォルダを選択してください"
'ダイアログボックスを表示し、OKを押した場合の処理
If dialog.ShowDialog() = DialogResult.OK Then
'選択したフォルダパスをラベルのテキストに設定
Label1.Text = dialog.SelectedPath
'ボタンにフォルダ名だけ取得して設定
Button1.Text = System.IO.Path.GetFileName(dialog.SelectedPath)
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるフォルダを開く
Process.Start(Label1.Text)
End If
End Sub
'Button2をクリックしたら実行される命令
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'ラベルとテキストを元に戻す
Label1.Text = "未設定"
Button1.Text = ""
End Sub
'Button3がクリックされたら実行される命令
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'ラベルが未設定であればファイルを設定する
If Label2.Text = "未設定" Then
'ファイルダイアログ゙の新しいインスタンスをdialogに設定
Using filedialog As New OpenFileDialog()
'ダイアログに表示するタイトルを設定する
filedialog.Title = "ファイルを選択してください"
'ダイアログを表示しOKを押したら
If filedialog.ShowDialog() = DialogResult.OK Then
'ダイアログで選択したファイル名を入れる
Button3.Text = filedialog.SafeFileName
'ダイアログで選択したファイルのフルパスを入れる
Label2.Text = filedialog.FileName
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるファイルを開く
Process.Start(Label2.Text)
End If
End Sub
'Button4をクリックしたら実行される命令
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
'ラベルとテキストを元に戻す
Label2.Text = "未設定"
Button3.Text = ""
End Sub
End Class
----------------------------------------------------------------------------------------
STEP4 Webページを格納・開く仕組みをつくる
最後に3つ目のタブのWebページを格納、開く仕組みをつくります。
ButtonControlとLabelControlを追加しましょう。
Webページ用のタブを開き、Buttonを2つ、Labelを1つ追加します。
追加したら、同じようにボタンはテキストを削除、ラベルは未設定、最後のボタンはRESETにTextプロパティを変更します。
最初にボタンのClickから設定していきます。
ラベルのテキストが未設定であれば、設定する命令とします。
Webサイトの場合は、フォルダやファイルと違い、ダイアログを開くのではなく
ユーザーにURLを入力してもらう形をとります。
最初に、InputBoxを使用し、URLを入力して下さいと表示し
その結果をuserInputという変数に入れます。
一度変数に入れる理由としてCancel処理をした場合に""と空の文字列が返ってくるので
テキスト部分が削除されるのを防ぐ為です。
Ifを使用し、<>""で何も入っていない状態ではない場合(OKを押してURLを入れた場合)は
その内容をラベルとボタンのテキストに設定します。
そして、ボタンのテキストにURLは長すぎるので
再度InputBoxを表示し、ボタン用のWebページのタイトルを入力してもらいます。
この際もキャンセル処理をした場合の為に、一度userInputに入れて
入力後OKを押していたらテキストに入れる形をとります。
Button5を押すと、InputBoxが開き、URLの入力を求められます。
格納したいURLを入力しOKボタンを押下します。
そうすると、一旦ボタンとラベルにURLが入り、ボタン用のタイトルを入れる
インプットボックスが表示されます。
自身がわかりやすい名前を設定し、OKボタンを押下します。
そうすると、指定したタイトルがボタンのテキストに設定され、URLがラベルに設定されます。
後は、ボタンをクリックしたら指定したサイトが開くように設定します。
今回はChrome.exeを使用して、Chromeで指定したURLを開く形にします。
Process.Startでクロムを起動し、ラベルのテキストのURLを開きます。
これでボタンに設定されている場合は、指定したサイトをChromeで開くことができるようになりました。
RESETボタンのクリックも設定を忘れず、Clickイベントに指定します。
ラベルとボタンのテキストを元に戻す処理を記述します。
Webページの設定や、フォルダ・ファイルの設定と同様に、使用したテキストを残したい場合は
各項目のPropertyBinding設定も設定してください。
ここまでのサンプルコード
-------------------------------------------------------------------------------------------
Public Class Form1
'Button1をクリックしたときに実行される命令
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'ラベルが未設定であればフォルダを設定する
If Label1.Text = "未設定" Then
'フォルダブラウザダイアログ゙の新しいインスタンスをdialogに設定
Using dialog As New FolderBrowserDialog()
'説明文の指定
dialog.Description = "フォルダを選択してください"
'ダイアログボックスを表示し、OKを押した場合の処理
If dialog.ShowDialog() = DialogResult.OK Then
'選択したフォルダパスをラベルのテキストに設定
Label1.Text = dialog.SelectedPath
'ボタンにフォルダ名だけ取得して設定
Button1.Text = System.IO.Path.GetFileName(dialog.SelectedPath)
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるフォルダを開く
Process.Start(Label1.Text)
End If
End Sub
'Button2をクリックしたら実行される命令
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'ラベルとテキストを元に戻す
Label1.Text = "未設定"
Button1.Text = ""
End Sub
'Button3がクリックされたら実行される命令
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'ラベルが未設定であればファイルを設定する
If Label2.Text = "未設定" Then
'ファイルダイアログ゙の新しいインスタンスをdialogに設定
Using filedialog As New OpenFileDialog()
'ダイアログに表示するタイトルを設定する
filedialog.Title = "ファイルを選択してください"
'ダイアログを表示しOKを押したら
If filedialog.ShowDialog() = DialogResult.OK Then
'ダイアログで選択したファイル名を入れる
Button3.Text = filedialog.SafeFileName
'ダイアログで選択したファイルのフルパスを入れる
Label2.Text = filedialog.FileName
End If
End Using
Else 'ラベルが設定されている場合
'ラベルに設定してあるファイルを開く
Process.Start(Label2.Text)
End If
End Sub
'Button4をクリックしたら実行される命令
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
'ラベルとテキストを元に戻す
Label2.Text = "未設定"
Button3.Text = ""
End Sub
'Button5がクリックされたら実行される命令
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
'ラベルが未設定であれば
If Label3.Text = "未設定" Then
'ユーザーが入力した内容を入れる用の変数
Dim userInput As String
' InputBoxを表示し、ユーザーの入力した結果をuserInputに入れる
userInput = InputBox("URLを入力してください")
'キャンセルした場合は""となる為何もしない
If userInput <> "" Then
' ユーザーがOKボタンをクリックした場合のみLabel3のテキストにURLを入れる
Label3.Text = userInput
'ボタンも同様に設定
Button5.Text = userInput
'ボタンに設定するWebページのタイトルを入れる
userInput = InputBox("Webページのタイトルを入力してください")
'キャンセルした場合は""となる為何もしないがOKの場合は入力したテキストをボタンに入れる
If userInput <> "" Then
'入力した内容を入れる
Button5.Text = userInput
End If
End If
Else 'ラベルが設定済みであれば
'ChromeでラベルのテキストのURLを開く
Process.Start("Chrome.exe", Label3.Text)
End If
End Sub
'Button6がクリックされたら、
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
'ラベルとテキストを元に戻す
Label3.Text = "未設定"
Button5.Text = ""
End Sub
End Class
-------------------------------------------------------------------------------------------
後はボタンを増やして、活用しやすいようにしてもらえればと思います。
デスクトップがごちゃごちゃするのが好きではないので
各項目10個くらい入れておけばスッキリしますし、良いのではないでしょうか。
拙い文章を読んで頂き有難う御座います、良いアプリライフを。
いつも有難う御座います。