[C#]foreach文でループカウンタを取得する方法
C#でforeachを使用してループを行うと、シンプルな表記で集合内のデータを処理する事ができるので便利ですが、何番目の値を処理しているかのループカウンタが無いのが不便です。 このような場合は、以下のようにSelect()メソッドを使用すると処理中データのindexを取得できます。 static void Main(string[] args) { string nameArray = new string[] { "alice", "bob", "charlie",…
続きを読む
[VS2010]exeのバージョン表示で,リビジョンNoを自動インクリメントさせる
VisualStudio2010で作成したアプリには、バージョン番号を付与する事ができます。 アプリにバージョン番号を付与しておく事で、ユーザは自分が使用しているアプリが最新なのかを簡単に把握する事ができます。 このバージョン番号は、VisualStudio2010のデフォルトでは開発者が明示的に指定する事になりますが、場合によっては自動でインクリメントしてくれた方が便利な場合があります。 そこで、本記事では、バージョン番号を自動インクリメントさせる方法を説明します。 また、リビジョン番号を自動更新させるとuser.configの取り扱いで問題が出てくるため、この対処法も合わせて説明します。 …
続きを読む
[C#]タスクトレイアイコンの画像を動的に変更する
Windowsでプログラムを作成する際、通常は画面(Form)を持つプログラムを作成する事が多いですが、簡単な監視や通知プログラムの場合タスクトレイに常駐させるプログラムを作成する事が有ります。 タスクトレイアプリを作成した場合、バルーンヘルプやアイコンをクリックしたときのメニューの他に、トレイのアイコンで状態を通知したい事が有ります。例えば、タスクマネージャはCPU負荷を表示してくれますし、一般的なメール監視アプリでは新着メール着信は、メールチェック中にアイコンイメージを変更する事が多いです。 そこで、今回はC#でタスクトレイアプリを作成時に、アイコンの画像を編集する方法を説明します。 サン…
続きを読む
[VS2010]データセット作成時、xscファイルで「DataSetUISetting要素が宣言されていません」警告が表示される
VisualStudioのデータセット作成でxsdファイルを作成した際に、自動生成されるxscファイルで以下の警告が表示される場合があります。 ‘urn:schemas-microsoft-com:xml-msdatasource:DataSetUISetting’ 要素が宣言されていません。’urn:schemas-microsoft-com:xml-msdatasource:DataSetUISetting’ 要素が宣言されていません。 この警告は、開発者側の問題ではなく、VisualStudioが自動生成するxscファイルに不備があるのが原因なので、無視しても構いません。 関連情報: a…
続きを読む
[PHP]mb_str_split: 指定した文字数で,文字列を分割する(全角文字対応版)
指定された文字列を指定した文字数単位で分割し、配列として返す関数を作成しました。 ここでいう「文字数」はbyte数ではないので注意してください。 例えば”あいうえお”は、10ではなく5とカウントします。 function mb_str_split( $inStr, $length ) { $outArray = array(); // パラメータチェック if ( $length < 1 ) { return FALSE; } for ( $offse…
続きを読む
[C#]指定した幅(byte数)で文字列を分割する(全角文字対応版)
指定された文字列を指定したbyte数単位で分割し、結果を配列として返す関数です。 byte数は、SJISとして解釈した場合での計算となります。 本関数は、phpで言うところのマルチバイト対応版str_split()関数のようなものです。 //********************************************************************* /// <summary>文字列を指定した文字数単位で分割する(全角文字考慮) /// </summary> /// <param name="inStr"> 分…
続きを読む
[C#]フォームを最前面・最背面に移動させる
ウィンドウを最背面にしたい場合はFormが持っているプロパティのTopMostプロパティをtrueにします。 但し、TopMostにしてしまうと常に最前面のままになってしまうため、直ぐにfalseに戻してあげれば、一時的に最前面に移動させる事ができます private void Button1_Click(object sender, EventArgs e) { this.TopMost = true; this.TopMost = false; } private void Button1_Click(object sender, Even…
続きを読む
[C#]DataSet.xsdを作成すると、自動でデータセットクラスが生成される。
以前に、CrystalReportsで自作DataSetを元に帳票を印刷する方法を説明しましたが、説明の中に無駄な作業工程がありました。 参考記事:CrystalReportsで自作DataSetを元に帳票を印刷する どこに無駄があるかというと、下記のイベントハンドラ処理です。 private void button1_Click( object sender, EventArgs e ) { // レコード定義を行う DataTable table = new DataTable(); table.Columns.Add("id&…
続きを読む
[C#,VS2010]CrystalReportsで帳票レイアウト側にパラメータを渡す
CrystalReportsではDataSetを使用して帳票に印字するデータを渡します。通常はこれで問題ないのですが、印字する帳票によってはDataSetに依存しないプログラム指定のパラメータ値を帳票に渡したい場合もあります。 このような場合CrystalReportsには「パラメータフィールド」というものを使用して、データを渡す事が可能です。パラメータフィールドは通常、特定のデータのみを印字する等のデータ絞込み用の式パラメータや、データセットに依存しない印字データ(ヘッダ印字項目等)で使用されます。 それでは、パラメータフィールドを使用した帳票作成の手順を確認して行きましょう。 rptファイ…
続きを読む
[C#,VS2010]CrystalReportsで宛名ラベルを印字する(横方向へ明細データの繰返し)
前回は、CrystalReports作成したデータをPDF形式で出力させる方法を説明しました。 今回の記事では、宛名ラベルのような複数データを横方向に繰り返し印刷する帳票の作成方法を説明します。 今回のお題 印字内容は、純粋な宛名ラベルだったら「郵便番号+住所+氏名」程度ですが、今回は通販での注文配送をイメージして下記の項目を印字してみる事にします。 postalCode 郵便番号 region 都道府県 addressLine1 住所(1行目) addressLine2 住所(2行目) addressLine3 住所(3行目) name 氏名 orderId 注文ID sku 商品ID la…
続きを読む
[C#,VS2010]CrystalReportsでPDF出力を行う
前回の記事では、作成した帳票をPrintToPrinter()メソッドでプリンタに出力しました。 参考:CrystalReportsで自作DataSetを元に帳票を印刷する。 帳票の結果を常に印刷したい場合は前回の方法で問題ないのですが、出力結果をメールしたい場合等においては結果をpdfの電子媒体として保存したい場合もあります。このような場合はCrystalReportDocumentクラスが持っているExportOptionsプロパティを指定する事によって、プリンタではなくPDFファイルへ出力する事が可能です。 PDF出力を行う処理は以下の通りです。 ※下記のコードは前回の記事で作成した…
続きを読む
[C#,VS2010]CrystalReportsで自作DataSetを元に帳票を印刷する。
前回はVisualStudio2010の環境で、C#を使用してCrystalReportsの帳票印刷のセットアップと、簡単な帳票発行の動作確認を行いました。 VS2010でCrystalReportsを使用して、帳票を作成する 今回は、プログラムから指定したデータ郡を複数レコード、印刷してみます。 帳票プログラムの場合、複数レコードの印刷は、データベースからデータを取得して、その内容を印刷する事がよくあるパターンです。C#ではDBから取得したデータは、通常DataSetクラスを使用して管理します。 いきなりDBを使用したパターンのプログラムを解説すると考慮すべき点(=説明する内容)が多くなって…
続きを読む
[C#]VS2010でCrystalReportsを使用して、帳票を作成する
本記事では、VisualStudio2010、C#の環境でCrystalReportsを使用して印刷を行います。 CrystalReportsは、VisualStudio2010のProfessional以上でのみ使用可能です。 ちなみに、Expressエディションので印刷を行う場合はPrintDocument/PrintDialogコントロールを使用すれば可能ですが、キャンバスに文字や画像を配置するような形になるので、業務で使用するような帳票を作成するのは非常に手間が掛かります。 セットアップ VisualStudioをインストールしただけでは、CrystalReportsはセットアップされ…
続きを読む
[C#]プログラム中でApplication.Exit();を実行しても、プログラムが終了しない
プログラム中でApplication.Exit()を実行するとプログラムを終了させる事が可能です。 ですが、以下の場合はプログラムを終了させる事ができません。 BackgroundWorkerを使用している場合 かつ 指定されたタスクが未完了の場合 BackgroundWorkerを使用している場合 かつ 指定されたタスクが未完了の場合 これは、プログラムのイベントループがBackgroundWorkerの終了待ち状態となり、結果としてプログラムが終了できない事が原因です。 ※勿論、BackgroundWorkerのDoWork()イベントが終了すれば、プログラムは終了します。 上記の状態を避…
続きを読む
[C#]DataGridViewを指定した列でソート可能にする
以下のコードで、1列目の内容を元に昇順ソートが行えます。 降順にしたい場合は、第二引数をDescendingに変更します。 // 1列目データを元に昇順でソート DataGridView1.Sort( DataGridView1.Columns[0], ListSortDirection.Ascending );// 1列目データを元に昇順でソート DataGridView1.Sort( DataGridView1.Columns[0], ListSortDirection.Ascending ); また、逆に列のヘッダをクリックしてもソートできないようにさせる…
続きを読む
[C#]Formのコントロールをダブルバッファ対応にする方法
画面を頻繁にリフレッシュするプログラムを作る場合、コントロールが持つDoubleBufferedプロパティをtrueすることで、ダブルバッファ機能を有効にすることが出来ます。 Formの場合は、Form1.DoubleBuffered = trueとすればOKなのですが、DataGridView等のコントロールの場合はこのプロパティがProtectedとなっているため、プログラムから値を変更することが出来ません。 この場合は、リフレクションを使用して、DoubleBufferedプロパティを強制的にtrueにすれば、チラツキを抑えられます。 public static void SetDoub…
続きを読む
[C#]Formから指定した名前を持つコントロールをLinqで取得する
Formが持つControlsプロパティより、指定した名前を持つコントロールを取得できます。 var target = from x in Controls.Find("label1", false) where x.GetType() == typeof(Label) select x; Label label = (Label)target.FirstOrDefault();var target = from x in Controls.Find("label1&qu…
続きを読む
[C#]クラスのプロパティに数値セット時、範囲外データの処理をシンプルに扱う
クラスのプロパティに数値をセットする際、値として有効な範囲が決まっている場合があります。 範囲外の値が指定された場合は例外を投げるというのも1つの実装ですが、例外ではなく上下限値が指定されたとみなしたい場合はどうやって実装するとシンプルになるでしょうか? 例えば0~100の値が有効値で、負の数が指定された場合は0、100以上の値が指定された場合は100とみなしたい場合、以下のように記述するとすっきりします。 private int _Value; public int Value { set { // 指定値をセット(但し有効範囲は,0~100のみ) this._Value…
続きを読む
[C#]関数の呼び出し元のメソッド名を知る方法
下記のようにStackTraceクラスを使用することで、関数の呼び出し元を知ることが出来ます。 通常、関数は呼び出し元が誰であるかに依存せずに動作する必要がありますが、ログ出力を自作する場合等では便利かもしれません。 private static string GetCallerMethodName() { System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false); return stack.GetFrame(2).GetMethod&#…
続きを読む
[C#]Leaky Bucketアルゴリズムを実装する
AmazonのAPIでは呼び出し制限にリーキーバケットアルゴリズムを採用しています。今回、クライアント側で呼び出し回数が超過しないようチェックするため、リーキーバケットのアルゴリズムを実装を実装したクラスを作成しました。 内部で、BackGroundWorkerオブジェクトを生成し、指定された周期で、現在の値を再計算しています。 使い方は以下のような感じです。 オブジェクトの生成 LeakyBucket quota = new LeakyBucket();LeakyBucket quota = new LeakyBucket(); 値の初期化。 下記の例では、現在値が0、最大値…
続きを読む
カテゴリ
"プログラム"のRSS