パスワードを忘れた? アカウント作成
584624 journal

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プロパティがある。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...