2017-12-11 2 views
0

3 개의 cxRadioButton이있는 dxCheckGroupBox1이 있습니다. TdxCustomCheckGroupBoxCheckBox를 클릭하면 의 cxRadioButton이 활성화 또는 비활성화됩니다. 그것은 정상적인 행동입니다.라디오 버튼을 선택 취소하고 dxCheckGroupBox에서 case 문을 사용합니다.

그러나 CheckGroupBox를 비활성화하면 선택한 cxRadioButton을 선택 취소하여 으로 지정하겠습니다. GroupBoxCheckBox의 선택을 해제 한 후 마지막으로 사용한 버튼이 으로 체크 된 상태로 유지됩니다.

이것은 제대로 작동하지 않는 것 같습니다.

procedure TForm1.dxCheckGroupBox1Click(Sender: TObject); 
var i:integer; 
CheckGroupBox1 : TdxCheckGroupBox; 
begin 
for I := 0 to CheckGroupBox1.ComponentCount - 1 do 
if Components[0] is TcxRadioButton then 
(Components[0] as TcxRadioButton).Checked:=False;; 
end; 

또 다른 질문이 dxCheckGroupBox1 합니다 (cxRadioButton의 선택에 따라에 CASE 문을 사용하는 방법입니다

+0

두 아이디어 : 1.'Checked' 대신'EditValue'를 설정 2. 라디오 버튼 ** 중 하나가 ** 체크되어 있어야만합니까 ** –

+2

이 실제 코드입니까? CheckGroupBox1'은 지역 변수이며 존재하지 않습니다. 액세스 위반이 예상됩니다. 또 다른 문제는'CheckGroupBox1' 컴포넌트를 반복하는 것이지만, 루프 안에서'TForm1'의'Components' 배열에 접근하는 것입니다. 고정 인덱스 (0)를 사용하면됩니다. 나는 당신이 의도 한 것이'CheckGroupBox1.Components [i]'라고 믿는다. – nil

+0

@nil 네, 맞습니다. AV를 던집니다. – user763539

답변

0

음, 더 간단한 방법이없는 경우 다음이 할 것 :

procedure TForm1.Button1Click(Sender: TObject); 
begin 
if cxRadioButton1.checked then 
    begin 
    showmessage('button1'); 
    end 
else if cxRadioButton2.checked then 
    begin 
    showmessage('button2'); 
    end 
else if cxRadioButton3.checked then 
    begin 
    showmessage('button3'); 
    end 
else if cxRadioButton4.checked then 
    begin 
    showmessage('button4'); 
    end 
else showmessage('None of the above !'); 
end; 


procedure TForm1.dxCheckGroupBox1Click(Sender: TObject); 
begin 
cxRadioButton1.Checked:=false; 
cxRadioButton2.Checked:=false; 
cxRadioButton3.Checked:=false; 
cxRadioButton4.Checked:=false; 
end; 
관련 문제