Form1.Edit1.SetFocus;
Edit1是当前窗体的...
Edit1是当前窗体的...
解决方案 »
- 有做过把C/S客户端程序转化为OCX在浏览器中调用的吗?大牛们请进~
- 轻松赚取20分,请问delphi里选择文件的组件在哪里?
- 客户端无法访问WEBSEVICE服务端,急!!!!!!
- 请问如何判断SPCOMM控件当前状态是打开还是停止?
- sql 相加后查询
- 一个关于SERVER和CLIENT端的信息收发问题,先谢过了。。^_^
- 窗体显示问题?向大家请教。
- 如何控制EDIT中输入的数值在0~59之间?
- 如何将一个RGB或HTML颜色值转化为Delphi颜色值,并在一个Edit1里面显示出来?
- 各路英雄!
- 关于获取坐标的问题
- delphi调用DLL提示错误[Error] Unit1.pas(81): Declaration expected but end of file found
用SetFocus的方法治标不治本,当程序复杂一点了就没办法控制了,就是想找一种更好的方法
SetFocus方法就是发送WM_SETFOCUS消息这一过程的包装而已。在form2类中添加一个变量用来访问form1中的变量// form2
type
TForm2 = class(TForm)
procedure formshow(sender:tobject);
public
parent:tform; // 用来保存父窗体的引用,假设是form1
end;procedure TForm1.FormShow(Sender: TObject);
begin
parent.edit1.sefocus;// 直接操作form1中的控件
end;// 在from1中
var
f2:tfom2;
begin
f2:=tform2.create(self);
f2.parent:= form1;// 把form1的引用传递给form2的parent变量
.....
谢谢sololie的热心帮助,你说的这些我也懂,现在的要求是Form2不允许访问Form1中的控件
这种方法也试过了,可以获焦,也可以自动选中Edit1中的文本,但是无法输入内容。
Form1: TForm2;
begin
Form1 := TForm2.Create(Application);
Form1.Show;
Edit1.SetFocus;
PostMessage(Edit1.Handle, WM_SETFOCUS, 0, 0);
我这样没问题啊.可以获焦点也可以自动选中
Form1: TForm2;
begin
Form1 := TForm2.Create(Application);
Form1.Show;
Edit1.SetFocus;直接这样就可以,可以获得焦点可以直接输入不用再点鼠标,只不过不现实caret而已,我是奇怪你为什么不行?
http://pan.baidu.com/s/1FyrUQ
TMyEdit = class(TEdit)
protected
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
end;{ TMyEdit }
procedure TMyEdit.WMSetFocus(var Message: TWMSetFocus);
begin
if not Form2.Visible then begin
SendMessage(Handle , WM_KILLFOCUS , 0 , 0);
Form2.Show;
SetFocus;
Message.Result := 1;
exit;
end;
inherited;
end;
Form1是子窗体或fsNormal窗体,Form2是任意窗体,在Form1中有个Edit1,在Edit1的OnEnter上触发弹出Form2,Form2弹出后光标继续停留在Form1.Edit1上,且可在Edit1上直接输入内容。我的解决方案是:
Form1是子窗体或fsNormal窗体,Form2是任意窗体,在Form1中有个Edit1,在Edit1的OnEnter上触发弹出Form2,Form2弹出后光标继续停留在Form1.Edit1上,且可在Edit1上直接输入内容。我的解决方案是:
procedure TForm1.Edit1Enter(Sender: TObject);
var
v_CustonForm: TCustomForm;
begin
Form2 := TFrom2.Create(Application);
Form2.Show;
v_CustonForm := GetParentForm(Edit1);
if v_CustonForm <> nil then
begin
if TForm(v_CustonForm).FormStyle = fsMDIChild then
PostMessage(v_CustonForm.Handle,WM_SETFOCUS,0,0); //如果是子窗体必须要先让子窗体获得焦点
end;
PostMessage(Edit1.Handle,WM_SETFOCUS,0,0);//再设置Edit1获得焦点
Edit1.SelectAll;
end;
Form2:=TForm2.Create(Application);
Form2.Enabled:=False;
form2.Show;
Edit1.SetFocus;
Form2.Enabled:=True;已测试,可用.form2.最好前置.要不会显示在form1后面.