※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

いろいろ




#で始まるフォルダ名

私は、エクスプローラで先頭に表示したいファイル名やフォルダ名に#をつけます。
ところが、このフォルダ名で、不幸な目にあいました。
プロジェクトの出力フォルダを、"..\#Bin"にしていたのですが……
  1. SandCastel
リンク切れのヘルプファイルが出来上がります。
  1. TestDriven
Run Test(s)が行われなくなります(結果が、0 Passed, 0 Failed, 0 Skippedとなる)。
個別のテストはできるし、NUnitの呼び出しもできます。
VisualStudio2005 Pro とVisualStudio2008 Std で確認しました。


Keys列挙体を、キャラクタコードに変換する

if (e.KeyChar ==  (char)Keys.Enter) {
    :

イベントハンドラを匿名デリゲートで定義する

これで、中身が関数の呼出1個しかないような関数が、大幅に減らせます(^^
private void FormMain_Load(object sender, EventArgs e) {
    // 引数を書くとき、senderとかeとか、名前がダブるとエラーになるので注意(当然!
    textBox1.KeyDown += delegate(object _sender, KeyEventArgs _e) {
        // テキストボックスでENTERやESCが押されたときブザーを鳴らさない
        if (_e.KeyCode == Keys.Enter || _e.KeyCode == Keys.Escape) {
            _e.SuppressKeyPress = true;   // キーイベントをコントロールに渡さない
        }
    };
    // 引数を省略することもできる
    Button1.Click += delegate {
        TextBox1.Clear();
    }
}

別スレッドからのUI操作も匿名デリゲートで定義する

// 非同期に発生するイベントで、フォームをいじったりする
BeginInvoke((Action<string>)delegate(string s) {
    this.Text = s;
}, new object[1] { "Processing" }
);
// 親のスコープなので、引数で渡さなくても、そのまま書ける
BeginInvoke((MethodInvoker)delegate() {
    this.Text = "Processing";
});

ウルトラ感激!しました(@@
// ■ 使い方
// なにかのクラス.非同期に発生するイベント += delegate {
//    Util.SafelyOperated(this,(MethodInvoker)delegate(){
//        Textzbox1.Text = "イベント発生";
//    });			
// }
// 適当なユーティリティクラスに入れてきましょう
//「よこけん」さんのブログより転用させていただきました m(_ _)m
public static object SafelyOperated(
    Control context, Delegate process, params object[] args) {

    if (context == null || process == null) {
        throw new ArgumentNullException();
    }
			
     if (!(context.IsHandleCreated)) {
        	return null;
    }

    if (context.InvokeRequired) {
        return context.Invoke(process, args);
    } else {
        	return process.DynamicInvoke(args);
    }
}
public static object SafelyOperated(Control context, Delegate process) {
    return SafelyOperated(context, process, null);
}

タイマハンドラも匿名デリゲートで定義する

System.Threading.Timer tm = new Timer( (TimerCallback)delegate(object o) {
    // 処理
});

定義済みデリゲート

  • 指定したオブジェクトでアクションを実行するメソッドを表します。(System)
public delegate void Action<T>(T obj) 
  • イベント データを持たないイベントを処理するメソッドを表します。(System)
public delegate void EventHandler( Object sender, EventArgs e)
  • 一連の基準を定義し、指定されたオブジェクトがこれらの基準を満たしているかどうかを判断するメソッドを表します。 (System)
public delegate bool Predicate<T>
  • void として宣言された、パラメータをとらない任意のメソッドを、マネージ コード内で実行できるデリゲートを表します。(System.Windows.Forms)
public delegate void MethodInvoker ()
  • 特定の型のオブジェクトを別の型のオブジェクトに変換する方法を表します。 (System)
public delegate TOutput Converter<TInput,TOutput>( TInput input)

わざわざ自分で定義してたぽ

システム例外

ArgumentException すべての引数例外の基本
ArgumentNullException 引数がnullだった
ArgumentOutOfRangeException 引数が範囲外だった
   
System.OutOfMemoryException メモリを使い切った
System.StackOverflowException スタックがあふれた
System.NullReferenceException nullへの参照にアクセスしようとした
System.TypeInitializationException staticなコンストラクタが例外を発生させたが、だれもキャッチしなかった
System.InvalidCastException キャストの間違い
System.ArrayTypeMismatchException 配列の型が合わない
System.IndexOutOfRangeException 添え字の範囲から外れている
System.ArithmeticException 数値演算エラー
System.DivideByZeroException ゼロ除算
System.OverflowException オーバーフロー