C#
定石4: EditingControlShowingでIME /数値制限を仕込む
出典: WinForms DataGridView の編集モード完全ガイド — ReadOnly / EditMode / RowValidating の使い分け — 定石4: EditingControlShowingでIME /数値制限を仕込む
// ✅定石4: EditingControlShowingで数値のみ入力を強制
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell?.OwningColumn.Name == "amount")
{
var textBox = e.Control as TextBox;
if (textBox != null)
{
//既存ハンドラを外す(重複登録防止)
textBox.KeyPress -= NumericOnly_KeyPress;
textBox.KeyPress += NumericOnly_KeyPress;
// IMEをOFFに(半角強制)
textBox.ImeMode = ImeMode.Disable;
}
}
}
private void NumericOnly_KeyPress(object sender, KeyPressEventArgs e)
{
//数字(0-9)と制御文字(BackSpace等)のみ許可
if (!char.IsDigit(e.KeyChar)&& !char.IsControl(e.KeyChar))
{
e.Handled = true; // ←キー入力をキャンセル
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「定石4: EditingControlShowingでIME /数値制限を仕込む」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅定石1: ReadOnlyの3層階層 //階層1:コントロール全体(最強・最もシンプル) dataGridView1.ReadOnly = true; dataGridView1.AllowUserToAddRows = false; //新規追加行も無効化未収録
定石1: ReadOnlyの3層階層—コントロール/列・行/セル
#548f6ae7bc2a
// ✅定石2: EditMode 4種類の挙動 // 1. EditOnEnter:セルにフォーカスが入った瞬間に編集モード(既定値: EditOnKeystrokeOrF2) dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;未収録
定石2: EditMode 4種類の使い分け—編集開始タイミング制御
#d2b3e420786d
// ✅定石3:編集イベントの3段階制御 // 1. CellBeginEdit:編集モードに入る直前 private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) {未収録
定石3: CellBeginEdit / CellEndEdit / RowValidatingの使い分け
#511ed36968b3
// ❌ NG: DataBound前にRows[i].ReadOnlyを設定(消える) private void Form_Load(object sender, EventArgs e) { dataGridView1.DataSource = LoadFromDb();未収録
定石5: DataBindingCompleteで行単位ReadOnlyを維持
#644e739d514b
