2011-10-17 5 views
1

프로그래밍 방식으로 일부 레이블을 만들지는 않습니다. 코드는 오류를 반환하지 않지만 내 창에는 레이블이 표시되지 않습니다.REALBasic - 프로그래밍 방식으로 컨트롤 만들기

dim dr As DatabaseRecord 
dim sql As String 

sql = "SELECT * FROM pack WHERE applicabilita_modello LIKE '%" + versione + "%'" 

dim rs As RecordSet = database.SQLSelect(sql) 

dim i As Integer = 1 
dim test(10) As Label 
while not rs.EOF 


    test(i) = new Label 

    test(i).Text = rs.Field("descrizione").StringValue 
    test(i).Left = me.Left 
    test(i).Top = me.Top * i 
    test(i).Enabled = true 
    test(i).Visible = true 

    rs.MoveNext 

    i = i + 1 

wend 

rs.Close 

레코드 집합에 데이터가 포함되어 있는지 확인했지만 루프는 올바르게 작동하지만 레이블이 표시되지 않고 이유를 이해할 수 없습니다. 어떤 도움

답변

5

에 대한

덕분에 실제 스튜디오에서 런타임에 컨트롤을 생성하는 방법은 두 가지가 있습니다. 첫 번째는 컨트롤 배열을 만드는 것입니다. MyLabel 컨트롤의 이름을 지정하고 인덱스에 0을 지정할 수 있습니다. 그러면 코드는 다음과 같습니다.

test(i) = new MyLabel 

두 번째는 ContainerControl을 사용하는 것입니다. 이 컨테이너에는 레이블이 포함되어 있으며 NEW 명령을 사용하고 ContainerControl.EmbedWithin 메서드를 사용하여 창 (또는 다른 컨테이너)에 추가 할 수 있기 때문에 레이블이 포함됩니다.

나는 일반적으로 컨트롤 컨트롤 어레이가 로직을 더 복잡하게 만들어주기 때문에 많은 이유로 컨테이너 컨트롤 접근 방식을 선호한다. 컨테이너의 유일한 단점은 Real Studio Professional 또는 Real Studio Enterprise가 필요하다는 것입니다.

http://docs.realsoftware.com/index.php/UsersGuide:Chapter_5:Creating_New_Instances_of_Controls_On_The_Fly

http://docs.realsoftware.com/index.php/ContainerControl

+0

또한 동적 레이아웃을 생성하는 데 유용하다 Control.Close 방법을 사용하여 런타임 인덱스 컨트롤을 제거 할 수있다. – Beejor

관련 문제