SkyDrive へVS2010用 TryApp.zip テンプレート
機能のテストをしたい場合、やはりコンソールアプリが手軽です。イベント単位で実装する事になるので、後から再利用する際にもわかり易くて良いと思います。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace TryApp1 { public class Program { [STAThreadAttribute] static void Main(string[] args) { App app = new App(); // イベントの追加 app.ShowEnv += MyProc1; app.GetDir += (string path) => { Console.WriteLine(path + " が選択されました" ); string[] filenames = null; if (path != "") { filenames = Directory.GetFiles(path); foreach (string value in filenames) { Console.WriteLine(value); } } }; app.GetFile += (string path) => { Console.WriteLine(path + " が選択されました"); }; // メソッドによる実装 app.Cmd += MyProc2; // ラムダ式による実装 app.Cmd += (string cmd) => { Console.WriteLine(cmd + " が実行されました"); }; // ****************************************** // 終了せずに、コマンドプロンプトを保持する。 // ( "q" で終了 ) // ****************************************** app.Loop(); } // ****************************************** // 環境周りの情報 // ****************************************** static private void MyProc1( string[] data ) { foreach (string value in data) { Console.WriteLine( value ); } } // ****************************************** // 処理のテンプレート // ****************************************** static private void MyProc2( string cmd ) { Console.WriteLine( cmd ); } } }
STAThreadAttribute は、ダイアログを開く時に必要でした
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.IO; using System.Windows.Forms; namespace TryApp1 { class App { // 引数が一つのイベント public delegate void AppHandler(string cmd); // 引数が文字列配列のイベント public delegate void AppHandlerResults(string[] data); // 環境周りの情報を取得するイベント public event AppHandlerResults ShowEnv = null; // フォルダ選択ダイアログ public event AppHandler GetDir = null; // ファイル選択ダイアログ public event AppHandler GetFile = null; // イベントのテンプレート public event AppHandler Cmd = null; // ****************************************** // コンストラクタ // ****************************************** public App() { } // ****************************************** // 終了せずに、コマンドプロンプトを保持する。 // ****************************************** public void Loop() { while (true) { // ****************************************** // 専用プロンプト // ****************************************** Console.Write("app>"); string line = Console.ReadLine(); // ****************************************** // 終了コマンド // ****************************************** if (line == "q") { break; } // ****************************************** // 環境周りの情報を取得するイベント // ****************************************** if (line == "env") { if (ShowEnv != null) { // 実行ファイル string thisPath = Assembly.GetExecutingAssembly().Location; // 実行ファイルのあるディレクトリ string thisDir = Path.GetDirectoryName(thisPath); string[] result = { line, thisPath, thisDir }; ShowEnv(result); } } // ****************************************** // フォルダ選択 // ****************************************** if (line == "dir") { if (GetDir != null) { // フォルダ選択ダイアログ var dir = new FolderBrowserDialog(); dir.SelectedPath = @"c:\"; var result = dir.ShowDialog(); string path = ""; if (result == DialogResult.OK) { path = dir.SelectedPath; } GetDir(path); } } // ****************************************** // フアイル選択 // ****************************************** if (line == "file") { if (GetFile != null) { // ファイル選択ダイアログ var file = new OpenFileDialog(); file.Filter = "全て|*.*|テキスト|*.txt;*.log"; file.FilterIndex = 0; file.FileName = ""; var dr = file.ShowDialog(); string path = ""; if (dr == DialogResult.OK) { path = file.FileName; } GetFile(path); } } // ****************************************** // イベントのテンプレート // ****************************************** if (line == "cmd") { if (Cmd != null) { Cmd(line); } } } } } }
AppHandler または AppHandlerResults を使うか、デリゲートを増やして event を作成して機能追加します。 関連する記事 ■ コンソールアプリケーション(C#) で、クラス、デリゲート、イベント、ラムダ式の振舞いを理解する ■ TryAppテンプレートを使って『The Zip, GZip, BZip2 and Tar Implementation For .NET』のテスト
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート