C#Tips
・値が変更するまで待つようにするのに適したイベント
AutoResetEvent
ManualResetEvent
・Enumの便利
Enumの定数名称を取得する
Enum.GetName( typeof( enum名称 ). enumの定数値)
取得した値がEnumの値と合致するか判定する
Enum.IsDefied
値をEnumの値に変換
Enum.Parse
Enumの値を順次リストに追加
foreach( 型名 test in Enum.GetValues()))
{
list.add(test);
}
・Exeの起動環境を64bitに変更する
メニュー→ビルド→構成マネージャ
x64を追加する(チェックは外す)
・3項演算子
条件式?条件が成立するときに返す値 : 条件式が成立しなかったときに返す値
・合体演算子
値 ?? 値がNULLだったときに返す値
・メソッドの鍵かっこ
属性(あどりびゅーと)
・MessageInvoker
引数なし、戻り値なしのデリゲート宣言
・Action<T>
引数1~戻り値なしのデリゲート宣言
・ThreadでSleepを使用する際の注意点
InturruptでSleepも中断させる
→Catch( threadinterruptedException ex)
・ファイルを複数のスレッドから開くときの注意点
ファイルを誰かが開いているときは、たとえ値を読み込みたいだけでも、
ReadWriteで開いてあげないと例外をはくので注意。
書き込むスレッド
stream = new FileStream( filePath, FileMode.Append, FileAccess.Write, FileShare.Read)
読み込むスレッド
stream = new FileStream( filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)
・共有メモリの書き込みとか
intでも32bitとか64bitで判定が変化する可能性がある為、Int32と明確に指定する
・画面起動前と後で、呼ぶ処理を変えたい場合
if( invokerequired)
{
test.doinvoke(method);
}
else
{
method();
}
・log4netでReleaseモード時にログが出力されない!!
→pdbファイルを消しているから
因みに、プロジェクト→プロパティ→ビルドタブ→詳細設定
・抽象クラスについて
抽象クラスのコンストラクタはprotectedにする
外部からクラスを呼ばせないようにする為?
・タスクトレイアイコンの作り方
Visual Studioで参照の追加をした後、対象をダブルクリック
・ビルド順序の変更方法
プロジェクトの依存関係でチェックをつけたり外したりすると変わるらしい...
・ListBoxの見た目で、かつ列を追加したい
ListViewを使用
全行選択→FullRowSelect
・設定ファイルの場所を決める方法
AssemblyInfo内の
AssemblyCompany
AssemblyProduct
を変更することで、
Path.GetDirectoryName( Application.CommonAppDataPath);
したときに場所を指定できる
・XSDの作成方法
XMLを作成する
スタート→すべてのプログラム→Visual Studio 2010 TOOL→コマンドプロンプトを
実行
xsd C:\test.xmlを実行
→XSDファイルが作成されている
・シングルトンインスタンスの書き方
sealed class Singleton{
private static readonly Singleton _instance = new Singleton();
publlic static Singleton Instance{ get{ return _instance; } }
private Singleton(){}
*singletonとstaticメソッドの使い分け
singletonは任意のタイミングでオブジェクトを生成することができる。
そのため、実行ファイルを叩いても全然起動しない...みたいなことはsingletonに
すれば解決できることもあるかも。
・ファイルの拡張子を返す
Sytstem.IO.Path.GetExtension( dir);
・Datetime型をbyte配列に変換
BitConverter.Getbytes( datetime.tobinary());
・
・実行ファイル名とパスをつなげる場合の指定方法
System.IO.Path.Combine(Application.StartupPath, "data.xml");
⇒2つのパスをつなげる場合
path = Application.StartupPath + @"\" + datetime.now.Tostring("yyyymmHH") + @"\" +
"data.xml";
⇒2つ以上のファイルをつなげる場合
・log4netを使用してログを出力する方法
/// <summary>
/// ・Download from http://logging.apache.org/log4net/download_log4net.cgi
/// ・解凍し、Desktop\log4net-1.2.12\src内のプロジェクトをReleaseでリビルド、プロジェクト右クリック⇒プロパティ⇒ビルドから、リリースフォルダを探し、
/// log4net.dllを入手
/// ・log4net.dllの参照を追加
/// ・Assenbly.csに
/// [assembly: log4net.Config.XmlConfigurator(ConfigFile=@"Log4net.Config.xml", Watch=true)]
/// を追加⇒コンフィグファイル名は必要に応じて設定
/// ・コンフィグファイルをbin\debug\内に作成(ビルド時にコピーするようビルドイベントを設定する必要あり。)
/// http://qiita.com/rohinomiya/items/2b86c4e8d5afd5c2fb39
/// がそのまま使える。
/// ・同じファイルに複数のプロセスから書き込む方法
/// <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
/// を追加
/// </summary>
⇒log4netから取得する処理を作成する際、dll化して、クラス内にいちいち
static ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
を欠かせないようにする
/// <summary>
/// クラスライブラリとしてプロジェクト作成、log4net.dll参照の追加
⇒staticプロパティに
static ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
をリターンで返させる
/// 利用側:
/// LoggerDll.Class1.Logger.Info("あああ");
/// logging.xml,ビルドイベント実施
/// アセンブリ情報追加
/// [assembly: log4net.Config.XmlConfigurator(ConfigFile = @"logging.xml", Watch = true)]
/// </summary>
・DataGridView
編集中にほかのコントロールに遷移してrowstateが変更してくれない!→Form1.Validate()を呼ぶ。
・値がNULLの時にTostring()メソッドで例外を出さないようにする方法
⇒Convert.Tostring(obj)を使用することで、NULLの場合も空文字が返ってくる
・エクセルに記載した帳票を出力する際、
前のデータを残さない方法(件数が前より少ない場合に前のデータが表示されないようにする方法)
WorkBook.Save();をしない
・エクセルの任意のセルに値を書き込む際、
動的に値をセットする方法
事前にテンプレートファイルに名前の定義を設定し、
Range("Sheet1!hogehoge").Value = "山本太郎"
と設定する
http://trash-area.com/archives/677
C#で名前の定義を取得
Range range = ExcelApp.get_Range("hogehoge", Type.Missing);
(見つからなかったときに例外が発生するため、例外が発生しないようにうまくやる)
参考:配列の自動化
http://support.microsoft.com/kb/302096/ja
・XML読み込み
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode(タグの名前);
node.Atteributes[要素の名前].Value
・NULLを返さずに変換する方法
Convert.To~
・Entity Frameworkでの値の取得方法
protected T GetObjectSet<T>(Type entityType)
{
return (T)this.objectContext.GetType().GetProperty(entityTye.Name).GetValue(
this.objectContext, null);
}
・Excelの通貨書式が勝手に変わらないようにする方法
xlBook.SaveAs(xlBook.FullName, Local : true);