语法问题,关于Case(50分)

  • 主题发起人 主题发起人 zanpen2001
  • 开始时间 开始时间
Z

zanpen2001

Unregistered / Unconfirmed
GUEST, unregistred user!
一个被调用过程,入口处判断调用者是哪一个
button,其实可以用if语句解决,但我想知道用Case怎么写。
Case sender of
button1:.....
button2:......
end;
其中Case后面的Sender部分怎么写才能正确?显然像上面那样写是不对的。

(通过服务器中转)
 
case (Sender as TButton).tag of
1 :
2 :
end;

这里的tag为你给各个Button设定的标记,你可以在属性编辑器里设定为1、2……。
 
又来晚了
 
>> 卷起千堆雪tyn >>为什么把Tag换成Name就不行?
case (Sender as TButton).name of
button1 :
button2 :
end;

 
Sender本身是一个对象,tag是这个对象的标记.
 
// 下面的方法可以不用预先设置 TAG 的值;但其实这种方法不好!因为不能改变名称!
var
ButtonName : String;
I : Integer;
begin
if not (Sender is TButton) then exit;

ButtonName := (Sender as TButton).Name;
Delete(ButtonName, 1, 6);
I := StrToInt(ButtonName);
Case I of
1: // BUTTON1
2: // BUTTON2
end;
end;
 
case只能針對整數型﹐不能用在字符型上﹐上面的都沒答到要點。
 
我就是不明白,name 和 Tag 都是Sender as tbutton的属性,为什么就不行?
 
to dadabox :如果是你,这段代码你会怎么写?其实我就是想把代码写得简单点。
 
>>我就是不明白,name 和 Tag 都是Sender as tbutton的属性,为什么就不行?
因为 TAG 是整数类型,而 NAME 是 字符串 类型。而 CASE 只能用于 整数 类型!
DADABOX 已经说的很明白了!
 
zanpen2001,明白了嗎﹖再看看Delphi的幫助吧。
 
>>zhihuali,是啊,我明白他说的话,但我想知道他怎么样这段代码。刚才也看了联机档了,
确实如此。
 
  还有一个办法,你把button1、button2……最后的数字读出来,再用StrToInt()转换
成整型,不过比较麻烦。
  就是楼上zhihuali的办法。
 
各位:又出问题了,按Case (sender as tbutton).tag of 这样写,语法检查通过了,但执
行时提示Invalid Class typecast,不知道是怎么回事。
 
代码如下:
procedure TMainFrm.file_source_result(sender:tobject);
var
file_name :string;
begin
case (sender as tbutton).tag of
1: file_name := edt_filepath.Text;
2: file_name := edt_resultfilename.text;
end;
file_name := 'NotePad '+file_name ;
try
Winexec(pchar(file_name),SW_SHOWNORMAL);
except
raise;
end;
end;
 
>>不知道是怎么回事。
// 在最前面加上下面的语句:
if not (Sender is TButton) then exit;
 
忘了说了,调用的时候我用的是file_source_result(self).
 
你这里的 SELF 指的是 窗体:类型是 TFORM ,这样当然有错了;用下面的语句吧:
file_source_result(Button1);
 
谢谢朋友们!
 
后退
顶部