PickListで選択のみにしたい


加山リカ  2003-01-07 22:40:32  No: 2511

DBGridでPickListを使っていますが、選択だけでなく、編集することも
できてしまします。
これを、List以外は選択できないようにするには、どうすればよいのでしょうか?
(Copy/Paste/Undo/Cut/Delete等もできてしまします。)
これを選択のみにするにはどうすればよいのですか?
宜しくお願いします。


にしの  2003-01-09 00:23:37  No: 2512

ちょっと危険なコードですが、以下のようにしてReadOnlyにすることができます。

//クラスを用意
type
  TMyGrid=class(TCustomGrid)
  public
    property InplaceEditor;
  end;
  TMyEdit=class(TCustomEdit)
  public
    property ReadOnly;
  end;
・・・・
//DBGridにフォーカスが入ったらReadOnlyにする
procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
  try
    TMyEdit(TMyGrid(DBGrid1).InplaceEditor).ReadOnly := True;
  except
    ;
  end;
end;

Copyはできてしまいます。
かなり危険なコードですので、ほかに良い方法が見つかりましたら、こちらは使用しないようにしてください。
# あまり細かく検証できていません!


Basser  2003-01-09 01:23:30  No: 2513

コンボボックスのドロップダウンリストと
同様の動作は無理なのではないでしょうか
変わりに TField の OnValidate イベントを使用すれば
リスト外入力を許可しないことはできます。
以下が例です。

procedure FieldValidate(Sender: TField);
begin
  if (Sender.AsString <> '') and
    (Columns[0].PickList.IndexOf(Sender.AsString) < 0) then
    raise Exception.CreateFmt(
      '%S はリストに存在しません。', [Sender.AsString]
    );
end;

イベントの設定方法は "入力桁数のチェック方法" でも答えているので、
そちらを参照して下さい

> (Copy/Paste/Undo/Cut/Delete等もできてしまします。)

上記に関してですが、何故できるといけないのでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加