몇 가지 사용자 지정 열거 자 세트를 만들었습니다.Delphi - 열거 자 유형의 항목을 ComboBox에 바인딩하고 선택한 항목을 객체에 바인딩하는 방법
예 :
Type TStatus=(Unknown=0, Dead=1, Owned=2, Borrowed=3);
지금 내 설정에 정의 된 모든 항목으로 콤보 상자를 채우기 위해 싶어요. 그래서 내 주먹 생각 TypeInfo, GetEnumName 및 GetEnumValue 함수를 사용하는 것입니다.
i:=0;
while GetEnumValue(TypeInfo(TStatus),GetEnumName(TypeInfo(TStatus),i))<>-1 do
begin
status:=GetEnumName(TypeInfo(TStatus),i);
ComboBox.Items.Add(status);
inc(i);
end;
(나는 별도의 어댑터로 ComboBox에 TStringList를 바인딩하려했지만 작동하지 않았습니다.)
내 ComboBox를 채운 후 LiveBindings를 사용하여 상태가 간단히 불리는 내 개체의 TStatus- 속성에 "SelectedValue"속성을 바인딩했습니다.
세 가지 문제점이 있습니다.
Status-property에 기본값을 할당 했는데도 개체를 스크롤 할 때 Combobox에 아무 값도 표시되지 않습니다.
콤보 상자에있는 항목의 금액은 다음과 같습니다
Amount of Items in Set + Amount of Objects
내가 내 콤보 상자에서 6 개 항목이 2 개체가 있다면이 값을 선택하면 그래서 때 4
유지한다 콤보 박스에서 그것을 내 개체에 게시하고 싶습니다. 내 Setter-Function에 액세스하지 못합니다.
이 라이브 바인딩은 전체적으로 나에게 새롭지 만 올바르게 배우고 싶습니다.
이 문제를 해결할 수 있도록 도와 주시면 감사하겠습니다.
감사합니다.
편집 : My Delphi 버전은 베를린 10.1이며 VCL을 사용합니다. 대상 플랫폼은 Windows 전용입니다.
편집 2 : https://www.dropbox.com/s/u7znetur723q6i2/DBApp.7z?dl=0 여기 내 프로젝트 파일입니다.
먼저 명시 적 열거 자 값을 제거하고 간단하게 다음을 사용합니다. type TStatus = (Unknown, Dead, Owned, Borrowed); 적어도 RTTI는 과거에는 잘 돌아 가지 않았습니다. –
StackOverflow에 대한 번호를 특별히 추가했습니다. 그 이유는 값을 할당하지 않는 것이 좋지 않은 것으로 간주되기 때문입니다. 그러나 나는 아쉽게도 현명하지 않다. –
나는 명시 적으로 enum 값을 필요로하지 않는다면 그것을 사용하지 말라. AFAIC 그들은 Delphi에서 관용적이지 않고 주로 C 호환성 (Kylix)에 사용됩니다. –