C#

WPF

連載:WPF入門 - @IT Windows フォーム コントロールおよび同等の WPF コントロール - msdn

CheckedListBoxのチェック状態を簡単に取得・設定できるクラスを作成

using System.Linq.Expressions; using System.Windows.Forms; ... public class CheckedListBoxWrapper<T, Tvm, Tdm> { CheckedListBox c; Func<T, Tvm> vmSelector; Func<T, Tdm> dmSelector; // コンストラクタ public CheckedListBoxWrapper(CheckedListBox c) { this.c = c; } // デ</t,></t,></t,>…

IDisposableインターフェースを実装したクラスを作るときに気を付けること。

C#

IDisposableインターフェースを実装したクラスは、usingステートメントを使って確実な終了処理が出来ないといけない。usingステートメントは以下のように書き using (var db = new SqlConnection(connectionString)) { db.Open(); } usingステートメントを使…

グループ化して上位N件ずつ取得

似たような事を既に書いてるけど、懲りずに。■やりたいこと: テーブル(コレクション)TからGでグルーピングしてOで並べ替えて、グループ毎の上位N件ずつだけ取得。T-SQLだとこんな感じか。 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY G ORD…

集合論とかの演算をC#(LINQ)でどう書くか考えてみた。

とりあえず 数学記号の表 - Wikipedia に載ってる項目について。■論理演算・量化 論理積 P ∧ Q P && Q 論理和 P ∨ Q P || Q 否定 ¬P !P 全称量化 ∀x ∈ S; P(x) S.All(x => P(x)) 存在量化 ∃ x ∈ S; P(x) S.Any(x => P(x)) 存在量化 ∃x(x ∈ S) S.Any() ■集合…

デザインパターン

C#

デザインパターン勉強しないとなぁ。■@IT - 連載:[完全版]究極のC#プログラミング C#3.0 デザインパターン ミニカタログ http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_20/extremecs_20_02.html■@IT - .NETで始めるデザインパターン http://www…

グループ化してセット演算子を適用する。 4

さらに再考。 ILookupに変換する部分を抽出。これでもうすこし使い勝手が良くなる。■グループ化セット演算 public static class GroupLinqExtensions { // groupのシーケンスをlookupに変換 public static ILookup<TKey, T> GroupToLookup<T, TKey>(this IEnumerable<IGrouping<TKey, T>> source) </igrouping<tkey,></t,></tkey,>…

グループ化してセット演算子を適用する。 3

さらに再考。 メソッドチェーンを繋げていくことを考えると、IEnumerable<IGrouping> を受け取って IEnumerable<IGrouping> を返すのが良い。■グループ化セット演算 public static class LinqExtensions { // グループ化したキーで重複除去 public stati…

グループ化してセット演算子を適用する。 2

再考。さっきよりは良い感じ。 Distinct は IEnumerable<IGrouping> を受け取って、他のセット演算は IEnumerable<IGrouping> を返すのがポイント。■グループ化セット演算 public static class LinqExtensions { // グループ化したキーで重複除去 (sourc…

グループ化してセット演算子を適用する。

要素の同一性を利用するのはDistinctだけじゃなくてセット演算子全部なので、グループ化してセット演算しやすくするクラスを作ってみたけどなんか複雑になっちゃった。■グループ化クラス public class GroupUniverse<T, TKey> { Func<T, TKey> keySelector; GroupSet set; publ</t,></t,>…

欲しかったのはDistinctじゃなくてOverだった。

単純な自作クラスだとpublic propertyが全部一致したら同一と見なすみたいな動作ではないのでDistinctでの重複要素の除外ができない。 これが結構厄介で、Tupleや匿名クラスに入れ替えたりしたけどなんかめんどくさいし、Distinctの拡張も考えてみたけどなん…

DataGridViewでCtrl+0(null値入力)の抑制

DataGridView を継承したクラスを作成。 ProcessDialogKey() と ProcessDataGridViewKey() をオーバーライドして Ctrl+0 の時に基底クラスのメソッドを呼ばないようにする。 protected override bool ProcessDialogKey(Keys keyData) { if (Pressed(keyData,…

キー入力でボタンクリックイベント発生やメソッド実行ができるようにする

■使用例 //F1キーを押すとbutton1のクリックイベント発生 //(※フォームが子コントロールのキーイベントを受け取れるように、 //あらかじめKeyPreviewをtrueにしておくこと) ControlHelper.SetButtonClickShortcut(this, Keys.F1, button1); //textBox1でEn…

DataGridViewのコンボボックスをワンクリックでドロップダウンさせる

■使用例 DgvHelper.SetOneClickDropDown(dgv); ■コード /// <summary> /// DataGridViewのコンボボックスをワンクリックでドロップダウンさせる。 /// </summary> public static void SetOneClickDropDown(DataGridView dgv) { if (dgv == null) { return; } dgv.CellClick += (…

DataTableをDataTableでフィルタリング

C#

■使用例 sourceTable を filterTable でフィルタリング(結合キーはともに actor_id )。 ただし、actor_id=9 の行はフィルターによってsourceTableから除外されない。 var destinationTable = DataTableFilter.Filter(sourceTable, filterTable, "actor_id"…

指定した書式で文字列をDateTimeに変換

C#

■使用例 var date = DateTimeParser.ParseNullable("20120720", "yyyyMMdd"); ■出力結果 2012/07/20 0:00:00 ■コード public class DateTimeParser { /// <summary> /// 指定した書式に従いDateTimeに変換。変換できない場合は例外が発生。 /// </summary> /// <param name="s">対象文字列</param> /// <param name="format"></param>…

DataTableから行を抽出して新しいDataTableを作成する

C#

■使用例 var destTable = DataTableHelper.Where(srcTable, row => (int)row["column1"] > 4); ■出力結果 ■コード /// <summary> /// DataTableから行を抽出して新しいDataTableを作成する。 /// </summary> /// <param name="source">対象DataTable</param> /// <param name="predicate">フィルター条件</param> /// <returns>フィルター後のDataTable</returns> …

配列の各要素を書式変換した上で連結する

C#

■使用例 string[] colors = { "red", "blue", "green" }; var joinedText = StringHelper.Join(",", "({0})", colors); ■出力結果 (red),(blue),(green) ■コード /// <summary> /// 配列の各要素を書式文字列に従って変換した上で連結。 /// </summary> /// <param name="separator">区切り記号として使</param>…

指定したコントロールにフォーカスがあるときラベルを強調 2

ラベルの強調表示の解除と強調の方法を指定できるようにした。■使用例 //強調(デフォルト設定) LabelHighlighter.Add(label1, textBox1); //強調の解除 LabelHighlighter.Remove(label1, textBox1); //強調(強調方法を指定) LabelHighlighter.Add(label1…

ComboBoxにbooleanのDataSourceを設定

boolだからCheckBoxで良さそうだけど、どうしてもComboBoxがいいって言われる時があるんだよね。 /// <summary> /// Combobox に boolean の DataSource を設定。 /// </summary> public static void SetBooleanDataSource(ComboBox comboBox, string trueText = "あり", string…

指定したコントロールにフォーカスがあるとき、ラベルを強調させる

/// <summary> /// 指定したコントロールにフォーカスがあるとき、ラベルを強調。 /// </summary> /// <param name="label">強調するラベル</param> /// <param name="control">フォーカスの監視対象のコントロール</param> public static void EmphasizeOnFocus(Label label, Control control) { control.Enter += (sender, e) => { label.…

データベースから取得したデータを処理する関数を集めたクラス

C#

いろんな便利関数を集めたクラスを XXXHelper という名前で作っていこうと思う。 using System; namespace SabineLib { /// <summary> /// データベースから取得したデータを処理する関数を集めたクラス /// </summary> public class DbObjectHelper { /// <summary> /// obj が null か </summary>…