[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、最大値…
続きを読む
[C#]ウィンドウを画面右下に表示させる方法
以下のコードをFormのLoadイベントに記述すると、画面がウィンドウの右下に表示されます。 // ウィンドウを画面右下に表示させる int left = Screen.PrimaryScreen.WorkingArea.Width – this.Width; int top = Screen.PrimaryScreen.WorkingArea.Height – this.Height; DesktopBounds = new Rectangle( left, top, this.Width,this.Height );// ウィンドウを画面右下に表示させる int left = Screen…
続きを読む
[C#]タスクトレイアイコンにバルーンヘルプを表示させる共通関数
たかだかメッセージを表示させるために何行もコードを書きたくない… というわけで、汎用のラッパ関数を作成しました。 使い方 // 3秒間エラーメッセージを表示させる。 showBloonHelp( TaskTrayIcon, ToolTipIcon.Error, "エラーです。", 3000 ); // 1秒間情報メッセージを表示させる。 showBloonHelp( TaskTrayIcon, ToolTipIcon.Info, "パターンファイルが更新されました。", 1000 );// 3秒間…
続きを読む
[C#]SoundPlayerクラスを使用して、1行でwav再生を行う。
下記の1行で、wavファイルの再生が可能。 (new System.Media.SoundPlayer("test.wav")).Play();(new System.Media.SoundPlayer("test.wav")).Play(); 同期再生の場合は、PlaySync()を使います。 ちなみに、SoundPlayerではmp3の再生や再生音量の調整は出来ません。
続きを読む
[C#,日付]ISO8601形式の文字列と、DateTime型の相互変換を行う方法
C#で時刻情報を管理する場合、DateTime型がよく利用されます。 一方、ログファイルなどで日付を文字列として表記する際、ISO8601形式で表現することがあります。 このISO8601形式というのは日付と時刻の表記に関する国際規格で、以下のようなフォーマットです。 2011-02-26T23:59:59Z2011-02-26T23:59:59Z ※厳密に言うと、規格上は他にも曜日表記を付け加えるなどのバリエーションがありますが、本記事では最もポピュラーな上記の書式のみを取り扱います。 この、ISO8601形式の文字列と、C#で用意されているDateTime型は、 以下のコードで相互変換を行…
続きを読む
[C#]DataGridViewで、行ヘッダにある三角マーク”▲”を非表示にする
DataGridView使用時に行ヘッダを表示させると、選択行に三角のマークが表示されます。 表示専用のグリッドなどで、上記マークを非表示にしたい場合は以下の作業を行います。 DataGridViewが標準で使用しているRowHeaderCellクラスが表示させているので、まずはこれを継承したクラスを作成します。 最後の引数で指定されたpaintPartsを弄って、状態表示のアイコンを非表示にしています。 //——————————————— // 三角マーク非表示版の、DataGridView行ヘッダー //————-…
続きを読む
[C#]アプリの設定画面で入力した内容をapp.configで管理する
アプリケーションでは通常、「ツール→オプション」等のメニューで、プログラムの動作内容をユーザがカスタマイズできることが多いです。 本記事では、C#のプログラムにて、ユーザが設定画面で入力した情報をapp.configで管理する手順を説明します。 1.設定画面を作ります 下記は、設定画面のサンプル画像です。Formを使って普通に作ればOKです。 2.設定画面のOK,キャンセルボタンに対してハンドラを定義します //********************************************************************* /// <summary> OK…
続きを読む