아래 코드
당신이 볼 수 있듯이, 된 TForm1의 OnException
가 으로 현재 그리드의 행과 열을 저장하는 변수 ERow 및 ECOL 그래서 나중에 그들에게 반환 할 수 있습니다.
FocusGridCell
은 저장된 값으로 그리드 셀에 포커스를 되돌릴 수 있습니다. 그리드에서 포커스를 떼어 낸 후에 ERow 및 ECol 값. OnDataChange 핸들러에 Application.MessageBox
이 있습니다.
바라는 바는 원하는 작업 만 수행하면됩니다. 이 응용 프로그램의 메시지 큐에 자신에게 사용자 정의 메시지를 게시하는 것이 좋습니다와의 팝업을 할 :
, BTW는 TDataSet의 이벤트 핸들러에서 물건을 표시하는 팝업 메시지를 사용하는 것이 일반적 나쁜 생각 사용자 지정 메시지의 처리기를 사용하면 이후에 팝업이 발생하고 데이터 집합 이벤트가 완료됩니다.
코드 :
TForm1 = class(TForm)
[...]
protected
ERow,
ECol : Integer;
procedure OnException(Sender : TObject; E : Exception);
procedure FocusGridCell(ACol, ARow: Integer);
public
end;
[...]
type
TMyDBGrid = class(TDBGrid);
procedure TForm1.FormCreate(Sender: TObject);
begin
ERow := -1;
ECol := -1;
Application.OnException := OnException;
end;
procedure TForm1.OnException(Sender: TObject; E: Exception);
begin
ERow := TMyDBGrid(DBGrid1).Row;
ECol := TMyDBGrid(DBGrid1).Col;
// the following shows a non-intrusive way to display status info without
// interfering with what's focused on the form, etc
Caption := Format('Row: %d, Col: %d', [ERow, ECol]);
end;
procedure TForm1.FocusGridCell(ACol, ARow : Integer);
begin
// Unless the grid's dgAlwaysShowSelection is True, the following
// call to DBGrid1.SetFocus is necessary, otherwise
// the call to SetFocus has no visible effect.
if not (dgAlwaysShowSelection in DBGrid1.Options) then
DBGrid1.SetFocus;
TMyDBGrid(DBGrid1).FocusCell(ACol, ARow, True);
end;
가) datachanged 이벤트가 그리드에서 내부 편집을하는 사용자에 의해 촉발되고 있습니까? b) "현재"세포가 무엇을 의미합니까? 오류가 발생하기 직전에 초점을 맞춘 세포입니까? – MartynA
a) 내 데이터 소스에 이벤트 'OnDataChanged'가 있습니다 ... b) 현재 셀 : 잘못된 데이터를 입력하면 셀이됩니다 – userPro
b) 예 : 마우스로 다음 셀을 클릭하면 .. 오류 : 이전 셀 일부 형식이 될 수 없습니다 .. – userPro