用Checkbox1.OnClick(self)为什么不行。(30分)

  • 主题发起人 主题发起人 ccweifen
  • 开始时间 开始时间
C

ccweifen

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了下面程序:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked then button1.Caption :='true'
else button1.caption:='false';
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_return then
checkbox1.OnClick (self);
end;
我想在EDIT1中按下回车后执行CheckBox1的OnClick事件,但没有反应。
请问这是为何?
 
checkbox1.OnClick
"."?
另外我不知道onclick(self)还是onclick(nil)
请在这个问题结束的时候给我一分好么?
 
千中元又来骗分了 :)
不是没有反应,是前后结果都一样,你根本看不出来
改成:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Button1.Caption:='Ready...';
ShowMessage('OK?'); //主要是造成延时,好看清楚
if key=vk_return then checkbox1.OnClick (self);
end;

由于你的OnClick与具体的Sender无关,这里用Self,nil,Button1等都无所谓
 
需加入类似以下代码

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
showmessage('see me?');
end;
 
按你这种做法,你的焦点应该处于 edit1 才行
 
以下方法可行,DELPHI5通过:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=Vk_Return then
Checkbox1.Checked:=Not Checkbox1.Checked;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if Checkbox1.Checked then Button1.Caption :='true'
else Button1.Caption:='false';
end;
 
你没有改变CheckBox的状态,当然没反应
要是在OnClick里没用到Sender,传什么都无所谓!
 
checkbox 会自动处理 click 后,checked 的变化。
 
问题解决。
千中元,看来你只能得一分了,哈哈
 
to pipi

他的要求就是在edit1中回车后引发OnClick事件

他没有更高的祈求.....

 
1分不要也罢,还没不明白怎么解决。
 
来学点东西
 
汤笑的方法是正确地,不用 messagebox 来延时
 
就按汤笑的做法,改就Checkbox的状态后它会自动执行Click.
那么多人都说得有道理,真难分配这分数。
当然汤笑多一点。千中元一分。
 
后退
顶部