8

正如你在我的问题历史中看到的那样,我正在开发一个电子书管理器,它将是开源的,我将在大约 10 天内发布它,但我有一个TRadioGroup,如你所见:
我的表单上使用的 TRAdioGroup http: //img85.imageshack.us/img85/1830/radiogroup.png

我想将一些东西存储在一个变量(需要是 a Integer)中,该变量将与 this “链接” TRadioGroup

我需要做这样的if功能:

TRadioButton 的标题 -> 需要存储在变量中的数字

适合 2xWidth - 默认 -> 0
适合 2xHeight -> 1
适合宽度 -> 2
适合高度 -> 3

但我只使用了 aTRadioGroup和 aTRadioButton一次,与我在 C# 中使用了 20 多次不同。然后我想知道我需要在 if 函数上放什么,因为它会做什么我已经知道该怎么做:

var
  num: Integer;

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

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

PS:我将把功劳归功于在这个小项目中帮助我的人。

4

2 回答 2

10

TRadioButton 具有 Checked 属性。但是 A 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 条件执行不同的语句。

于 2009-12-31T17:28:06.370 回答
6

一点提示:设置.ItemIndex不会将键盘焦点发送到收音机项目,我知道如何修复它,请继续阅读。

与其通过代码选择 RadioGroup 中的 Radio,.ItemIndex不如通过将焦点发送到 Radio 项目来进行设置;非常清楚:我的意思是仅将焦点发送到广播项目,而不是整个广播组。

代替:radiogroup.itemindex:=TheIndex;

这样做:TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

它将使单选项目被选中并将键盘焦点发送给它,因此它将显示围绕它的虚线矩形,就像用户单击它一样。

注意1:要查看它的实际效果,请使用键盘光标键并比较仅设置.ItemIndex和发送焦点到无线电项目的行为。

注2:如果使用TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;则完全不需要设置.ItemIndex,也可以设置。

Hope that helps someone having the same problem as me, when need to set it by code, for example to avoid circular keyboard behavor, for example for making it to stay on last radio item when last radio item is selected and keyboard right cursor is pressed , 第一次也是一样。

于 2013-01-29T12:26:18.960 回答