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

问题描述 投票:7回答:3

正如您在我的问题历史记录中所看到的,我正在开发一个电子书管理器,它将是开源的,我将在大约10天内发布它,但是我有一个TRadioGroup,如您所见:TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.png

而且我想将某些内容存储在变量中(该变量必须是Integer),此变量将与此TRadioGroup“链接”。

我需要执行以下if功能:

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

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

但是我只使用了一次TRadioGroupTRadioButton,这与我使用20多次以上的C#不同。然后我想知道我需要在if函数上放什么,因为它将要做什么我已经知道该怎么做:

var
  num: Integer;

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

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

PS:我将为在这个小项目中对我有帮助的人们提供荣誉。

delphi integer radio-button lazarus radio-group
3个回答
10
投票

TRadioButton具有Checked属性。但是,TradioGroup具有ItemIndex属性。

TradioGroup中的项目使用TString存储。因此,您可以将一个对象与每个选项相关联,并且可以将一个整数转换为要存储的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条件执行其他语句。


5
投票

只是一点提示:设置.ItemIndex不会将键盘焦点发送到收音机项目,我知道该如何解决,请提前阅读。

[通过设置.ItemIndex而不是通过代码选择无线电组中的无线电,最好是通过将焦点发送到无线电项目来做到这一点;只是非常清楚:我的意思是将焦点仅发送到广播项目,而不是整个广播组。

而不是:radiogroup.itemindex:=TheIndex;

执行此操作:TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

它将选择单选项目并将键盘焦点发送给它,因此它将以虚线框显示它,就像用户单击它一样。

注1:使用键盘光标键查看效果,并比较仅设置.ItemIndex并将焦点发送到单选项目的行为。

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

希望帮助与我有相同问题的人,当需要通过代码设置它时,例如避免圆形键盘行为,例如当选择了最后一个单选项目和键盘右光标时使其停留在最后一个单选项目上被按下,与第一次相同。


0
投票

如果收音机组:=则为真

开始

结束;

© www.soinside.com 2019 - 2024. All rights reserved.