A7Mの日記: 覚え書き:VCLのDBGridファミリーで特定フィールドに入力制限を付ける方法
日記 by
A7M
DBGridの特定フィールドで入力制限(数値のみ、桁数、etc.)をつけるには、DBGridのOnKeyPressイベントで行う。
フィールドの特定はDBGridのSelectedFieldプロパティを参照。
編集中の値は編集コントロールから取得する。編集コントロールの取得はDBGridのControlsプロパティから検索。
------ここから------
void __fastcall TForm1::DBGrid1KeyPress(TObject *Sender, char &Key)
{
TDBGrid* pGrid = dynamic_cast<TDBGrid*>(Sender);
if (pGrid == NULL) return;
// 入力フィールドの取得
TField* pField = pGrid->SelectedField;
if (pField && pField->FieldName == "HOGEHOGE") { // "HOGEHOGE"は制限を付けるフィールド名。特定は適当な方法で。
if (Key < 0x20) {
// コントロール系は受け付けないとやばいでしょ。
return;
} else if (isdigit(Key) == false) {
// 数字以外は受け付けない。
Key = '\0';
} else if (pGrid->ControlCount > 0) {
// Controls[0]ってのは、多分ぁゃιぃ。本当はdynamic_castしながら順番に探すのかな?
TInplaceEdit* pEdit = dynamic_cast<TInplaceEdit*>(pControl->Controls[0]);
if (pEdit && pEdit->Text.Length() >= 7) {
// 7桁を超えたら駄目!
Key = '\0';
}
}
}
}
------ここまで------
編集コントロールの取得は、dynamic_castビシバシだけど、
JVCLのJvDBGridやJvDBUltimGridならば、そのものズバリのInplaceEditorプロパティがある。
フィールドの特定はDBGridのSelectedFieldプロパティを参照。
編集中の値は編集コントロールから取得する。編集コントロールの取得はDBGridのControlsプロパティから検索。
------ここから------
void __fastcall TForm1::DBGrid1KeyPress(TObject *Sender, char &Key)
{
TDBGrid* pGrid = dynamic_cast<TDBGrid*>(Sender);
if (pGrid == NULL) return;
// 入力フィールドの取得
TField* pField = pGrid->SelectedField;
if (pField && pField->FieldName == "HOGEHOGE") { // "HOGEHOGE"は制限を付けるフィールド名。特定は適当な方法で。
if (Key < 0x20) {
// コントロール系は受け付けないとやばいでしょ。
return;
} else if (isdigit(Key) == false) {
// 数字以外は受け付けない。
Key = '\0';
} else if (pGrid->ControlCount > 0) {
// Controls[0]ってのは、多分ぁゃιぃ。本当はdynamic_castしながら順番に探すのかな?
TInplaceEdit* pEdit = dynamic_cast<TInplaceEdit*>(pControl->Controls[0]);
if (pEdit && pEdit->Text.Length() >= 7) {
// 7桁を超えたら駄目!
Key = '\0';
}
}
}
}
------ここまで------
編集コントロールの取得は、dynamic_castビシバシだけど、
JVCLのJvDBGridやJvDBUltimGridならば、そのものズバリのInplaceEditorプロパティがある。
覚え書き:VCLのDBGridファミリーで特定フィールドに入力制限を付ける方法 More ログイン