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)を使った、『さくらインターネット』用メール送信テンプレート


VS2010用 TryApp.zip テンプレート
機能のテストをしたい場合、やはりコンソールアプリが手軽です。イベント単位で実装する事になるので、後から再利用する際にもわかり易くて良いと思います。




