詳細仕様は割愛しますが、要はテキストファイルを開いて中身を表示させるものです。一応、ファイル選択ダイアログから開くというのはできるようになったのですが、せっかくなのでデスクトップのショートカットアイコンにドロップして開くというのもやってみようかと。
なんかググったらいろいろ出てきたのですが、コマンドラインで実行する(コンソールアプリケーションですね)のに引数を渡すというのは多いけど、Windowsフォームアプリケーションに渡すというのはあんまりない。
断片的な情報をつなぎあわせて一応できたので、自分用メモw
間違いご指摘とかアドバイスとかあればコメントいただけるとうれしいです。
適当なテストなのでエラー処理とかはしていません。
簡単なサンプルとして、アプリケーションのスタートアップフォームにボタンとファイル選択ダイアログ(OpenFileDialog)とテキストボックスがあって、ボタンクリック→ダイアログ表示→ファイル選択→テキストボックスにファイルパス表示、というのを作ってみました。ここまではまぁわかると思うので説明は割愛w
ダイアログから選択するかわりにファイルをドロップしたいわけです。
ドロップしたファイルのパスの取得については文字通りのやつを見つけたんですが、
実行ファイルにドロップされたファイルのパスを取得する: .NET Tips: C#, VB.NET
なんかピンと来ないのでここからリンクをたどって、
起動時のコマンドライン引数を取得する: .NET Tips: C#, VB.NET
を見ると、
「.NET Framework 2.0以降のVB.NETで、My.Application.CommandLineArgs を使用する方法」
というのがあるのでこれが使えそうです。ではこれをどこで使えばいいのか?
さらにググって、フォームアプリで引数を取得する例のようなものを発見。
方法 : Windows フォーム アプリケーションのバッチ モードを有効にする
これと、参照リンク先の、
方法 : アプリケーション イベントを処理する (Visual Basic)
を見ると、プロジェクトのプロパティから[アプリケーション イベントの表示]をクリックして出てきた AppricationEvents.vb で、スタートアップフォームが作成される前のアプリ起動イベントが拾えるらしいことがわかりました。
ここでさっきの My.Application.CommandLineArgs を使って引数を取得すればいいようです。
プロジェクトのプロパティページの説明はこのへんが参考になります。
連載! とことん VB: 第 33 回 C# とは異なる、Visual Basic のアプリケーション モデル 言語: VB.NET
というわけで、できたサンプルのソースはこんな感じ。
(ApplicationEvents.vb)
StartUpイベントで起動時の引数を拾う
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
If My.Application.CommandLineArgs.Count > 0 Then
Form1.OpenFileDialog1.FileName = My.Application.CommandLineArgs(0)
End If
End Sub
End Class
End Namespace
(Form1.vb)
ボタンクリックでダイアログからファイル選択して表示
その前にフォームのロード時にファイル名がセットされてたらそれを表示
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If DialogResult.OK = OpenFileDialog1.ShowDialog Then
TextBox1.Text = OpenFileDialog1.FileNames(0)
End If
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not OpenFileDialog1.FileName = "" Then
TextBox1.Text = OpenFileDialog1.FileNames(0)
End If
End Sub
End Class
デザイナで、OpenFileDialog1のFileNameプロパティは空にしておきます。
これで、ビルドしたexeやそのショートカットにファイルをドロップすると、パスがテキストボックスに表示されます。
ドロップしたらexeが起動するというのはどうやるのかとかも疑問に思ってたんですが、それについては特別何かのコードを追加しなくてもちゃんと起動してくれました。理屈はあとで調べておこうw
0 件のコメント:
コメントを投稿