Q&A

  • TRadioButton 등의 TButtonControl로의 Type Casting
TButtonControl
          +
          +--------- TCustomCheckBox
          +                                  +
          +                                  +-------------TCheckBox
          +--------- TRadioButton

위와 같은 Class 구조입니다.
제가 고려하는 것은 아래와 같습니다.
동적으로 생성되는 객체는 TRadioButton, TCheckBox 입니다.
이것을 MyControl(TButtonControl) 에 할당할려고 합니다.
즉, 간략한 소스 부분은 아래와 같습니다.

-------*< Source Begin >*----------
type
//직접 instance를 만들지 않는것을 권유하므로 상속을 받음
   TBtnCtrl = class(TButtonControl);
    .......
var
    MyControl : TBtnCtrl; //간접(?)으로 Instance 할당

procedure ???
begin
   ....    
    //ScrollBox1.Controls[i]는 동적 컨트롤(RadioButton 또는 CheckBox)
    MyControl := (ScrollBox1.Controls[i] as TBtnCtrl);
    ....
end;
-------*< Source End >*----------
위에서 MyControl 이 TButtonControl 형식이면 TRadioButton의 부모 클래스인데 Type Casting 이 왜 안 되는지 궁금합니다.
아니면, 제가 잘 못알고 있는 건지요?
읽어 주셔서 감사합니다...
3  COMMENTS
  • Profile
    최용일 2002.04.18 18:53
    안녕하세요. 최용일입니다.

    부모 컨트롤로 Type Casting은 되도, 자식컨트롤끼리는 Type Casting이 안됩니다... TBtnCtrl로 객체 선언하셨으니까 TBtnCtrl은 TButtonControl의 자식이 되는겁니다...

    그러니까 할려면 MyControl을 TButtonControl형으로 선언하시고 TButtonControl형으로 Type Casting하세요...

    var
        MyControl : TButtonControl;
    begin
        MyControl := (ScrollBox1.Controls[i] as TButtonControl);
        ......
    end;

    ^^ 항상 즐코하세요...

  • Profile
    남자 2002.04.18 19:30
    아래처럼 용일님 조언대로 했는데 오류가 발생하네요.
    {----- Source 일부입니다. -----}
    var
        MyControl: TButtonControl;
    begin
            .....
            MyControl := (sbxAns.Controls[i-1] as TButtonControl);
            MyControl.Checked := True; //Undeclared identifier: Checked 오류
            .....
    end;

    위에서 MyControl 은 TButtonControl Type인데 왜 Checked Property 가 안되는 것일까요?
    약간이라도 조언해 주시면 감사합니다.

  • Profile
    최용일 2002.04.18 21:12
    형변환 하셔야죠...TButtonControl에는 Checked란 속성이 없습니다. TButtonControl에서 파생된 TCheckBox에만 있는 속성입니다...
    부모컨트롤로 형변환하시면 부모컨트롤의 속성들만 사용하실 수 있습니다.

    TCheckBox(MyControl).Checked := True;

    ^^