var
SelectedRadioButton: TRadioButton;
//event shared by all radiobuttons
procedure TForm1.RadioButton1Enter(Sender: TObject);
begin
if Sender <> SelectedRadioButton then begin
SelectedRadioButton.Checked:= true;
end;
end;
procedure TFrameOrder.RadioButton1Click(Sender: TObject);
begin
SelectedRadioButton:= (Sender as TRadioButton);
end;
procedure TFrameOrder.RadioButton1KeyPress(Sender: TObject; var Key: Char);
var
MyRadioButton: TRadioButton;
begin
MyRadioButton:= (Sender as TRadioButton);
if Key in [#32,#13] then begin
MyRadioButton.Checked:= true;
RadioButton1Click(MyRadioButton);
end; {if}
end;
4条答案
按热度按时间xoefb8l81#
我知道您正在使用现有代码,这是一个真实的世界中的约束,在这些论坛中经常被忽视。
听起来复选框更适合您。您可以在OnChecked事件中强制RadioButton的排它性。这应该可以解决您的Tab键/焦点和选择/取消选择问题。
复选框不会在获得焦点时自动选中,用户可以使用空格键选中/取消选中它们。
ecfsfe2w2#
您可以在
OnEnter
事件中放置代码,以防止复选框被选中。不过,您需要以某种方式存储之前选择的
RadioButton
。创建一个新的TMyRadioButton组件可能会更清楚,因为这会使常规代码变得混乱。
cx6n0qe33#
我发现了一个关于这个问题的interesting article of Craig Stuntz。正如我所看到的,我需要创建自己的控件来解决它。
35g0bw714#
默认情况下,只有一个RadioButon具有属性TabStop = True;所有单选按钮都被视为一个控件当单选按钮具有焦点时,可以使用向上箭头和向下箭头在单选按钮之间切换
现在,当用户选择一个选项时,他们可以按Tab键切换到另一个控件(不改变收音机选项)。