有关焦点问题 |
答題得分者是:Fishman
|
Anonimity
一般會員 發表:8 回覆:9 積分:3 註冊:2004-01-28 發送簡訊給我 |
大家好。本人是新进会员,请多关照。
本人想请教一个问题。在Windows程序中,如“记事本”,输入内容后,如直接点击退出,将会出现一对话框,询问是否保存,如点取消,焦点就在最后编辑的位置闪烁,以便继续输入。现在用DBEdit控件向数据库输入,实现类似的功能。以下是本人写的代码:
procedure TTestForm.ExitButtonClick(Sender: TObject);
begin
if ADOTable1.Modified then
begin
if flag=1 then//以下为添加状态
begin
case Application.MessageBox('是否保存已输入的内容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) of
IDYES:DBNavigator1.BtnClick(nbPost);
IDCancel:Abort;
IDNO:TestForm.Close;
end;
end
else//以下为编辑状态
begin
case Application.MessageBox('是否保存已修改的内容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) of
IDYES:DBNavigator1.BtnClick(nbPost);
IDCancel:Abort;
IDNO:TestForm.Close;
end;
end;
end;
TestForm.Close;
end;
现在的问题是点击取消后,焦点消失了。如何实现焦点就在最后编辑的位置闪烁,如用指定控件名,SetFocus,是可以实现。但控件太多,如何知道焦点最后所处的位置?有简捷的方法吗?请指点,谢谢。 不断学习
------
不断学习 |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 先定義一個全域變數 LastEdit : TObject;
並將所有的 DBEdit 的 OnExit 事件指定為以下之程式碼
procedure TForm1.DBEdit1Exit(Sender: TObject); begin LastEdit := Sender; end; 再用 CASE Application.MessageBox('是否保存已修改的內容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) OF IDYES : DBNavigator1.BtnClick(nbPost); IDCancel : BEGIN Abort; TDBEDit(LastEdit).SetFocus; END; IDNO : TestForm.Close; END;即可 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
Anonimity
一般會員 發表:8 回覆:9 積分:3 註冊:2004-01-28 發送簡訊給我 |
谢谢Fishman,您提供的解决方法不错。只是顺序有些问题,我试验后应为:
CASE Application.MessageBox('是否保存已修改的內容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) OF
IDYES : DBNavigator1.BtnClick(nbPost);
IDCancel : BEGIN
TDBEDit(LastEdit).SetFocus;
Abort;
END;
IDNO : TestForm.Close;
END;
再表谢意。
贪心多问一下,用以上方法光标是停在DBEdit控件内容的最后位置,但不是原来的某一个任意位置,有解决办法吗?
实际上FishMan已经解决了我的问题,只是想再请教请教,技术上更精而已。 不断学习
------
不断学习 |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
Anonimity
一般會員 發表:8 回覆:9 積分:3 註冊:2004-01-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |