在TRadioGroup中哪个单选按钮被选中了?

8
正如您在我的问题历史中所看到的,我正在开发一款电子书管理器,它将是开源的,我将在大约10天内发布它,但是我有一个TRadioGroup,正如您所见:
我的表单上使用的TRadioGroup http://img85.imageshack.us/img85/1830/radiogroup.png 我想要将一些内容存储在一个变量中(需要是一个整数),并与这个TRadioGroup“链接”起来。
我需要像这样使用if函数:
Caption Of The TRadioButton -> 需要存储在变量中的数字 Fit 2xWidth - 默认值 -> 0 Fit 2xHeight -> 1 Fit Width -> 2 Fit Height -> 3
但是我只使用了一次TRadioGroup和TRadioButton,不同于我在C#中使用了20多次。然后我想知道我需要在if函数中放什么,因为我已经知道它要做什么:
var
  num: Integer;

begin
  if(TRadioButton1 checked?)
  begin
    num := 0;
  end;
end.

我需要在if函数的括号里放什么?

PS: 我会在程序中为帮助我完成这个小项目的人员署名。


从你的问题历史来看,我以为你在为GCC编写前端。为什么电子书管理器需要调用C编译器呢? - Rob Kennedy
这是我电子书管理器的一个新功能。 - Nathan Campos
2个回答

10

TRadioButton有Checked属性,但TRadioGroup有ItemIndex属性。

TRadioGroup中的选项使用TStrings存储。因此,您可以将一个对象与每个选项关联,并可以将整数强制转换为要存储的TObject。

示例:

// fill the radiogroup
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0));
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1));
radiogroup.Items.AddObject('Fit Width', TObject(2));
radiogroup.Items.AddObject('Fit Height', TObject(3));
radiogroup.ItemIndex := 0;

读取当前设置:

value := radiogroup.ItemIndex;

或者获取相关联的整数:

index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);

对于你的情况,值为0到3,因此可以使用ItemIndex。

需要注意的是if不是函数。函数是根据输入参数返回值的代码片段。if是语句,它是可以执行的命令。if语句很特殊,因为它允许你根据if条件来执行不同的语句。


好的,但是我该如何使用这段代码将它们存储在一个整数中,该整数只能保存一个数字,而这个数字将是唯一被选中的数字之一? - Nathan Campos
1
如果选择了适合宽度,ItemIndex = 2,如果选择了固定2倍宽度,则ItemIndex = 0等。 - Toon Krijthe

6
只是一个小技巧:通过设置.ItemIndex无法将键盘焦点发送到单选按钮项目,我知道如何解决,请往下看。
与其通过设置.ItemIndex来选择单选按钮组中的单选按钮,还不如通过将焦点发送给单选按钮项目来实现;只是要非常清楚:我指的是将焦点仅仅发送给单选按钮项目,而不是整个单选按钮组。
不要这样做:radiogroup.itemindex:=TheIndex; 而要像这样做:TRadioButton(radiogroup.Controls[TheIndex]).SetFocus; 这将使单选按钮被选中并且将键盘焦点发送到它上面,因此它将显示周围的虚线矩形,就像用户点击它一样。
注意1:使用键盘光标键查看它的操作并比较仅设置.ItemIndex和将焦点发送到单选按钮项目的行为。
注意2:如果使用TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;,则根本不需要设置任何的.ItemIndex,它也会自动完成。
希望这能帮助那些遇到与我相同问题的人,当需要通过代码设置它时,例如为了避免循环键盘行为,例如在选择最后一个单选按钮并按下键盘右光标时使其停留在最后一个单选按钮上,第一个也一样。

1
优秀的观察! - TomR
这个巧妙的逻辑解决了我们在表单上遇到的一个关于OnClick事件导致循环卡住的怪问题。谢谢! - TJ Asher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接