DBGridでPickListを使っていますが、選択だけでなく、編集することも
できてしまします。
これを、List以外は選択できないようにするには、どうすればよいのでしょうか?
(Copy/Paste/Undo/Cut/Delete等もできてしまします。)
これを選択のみにするにはどうすればよいのですか?
宜しくお願いします。
ちょっと危険なコードですが、以下のようにして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はできてしまいます。
かなり危険なコードですので、ほかに良い方法が見つかりましたら、こちらは使用しないようにしてください。
# あまり細かく検証できていません!
コンボボックスのドロップダウンリストと
同様の動作は無理なのではないでしょうか
変わりに 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等もできてしまします。)
上記に関してですが、何故できるといけないのでしょうか?
ツイート | ![]() |