[英]List index out of bounds in TPageControl
我遇到了一個表現出一些奇怪行為的TPageControl。
控件有3頁,但是當我這樣做
for I:=0 to PageControl.PageCount-1 do begin
PageControl.Pages[I].TabVisible := False;
PageControl.Pages[I].Visible := Ord(iColorScale.GenerationMode) = I;
end;
執行循環的第一次迭代的第一行時,我得到一個'List index out of bounds(3)'錯誤
PageControl.Pages[0].TabVisible := False;
現在,當我在調試器中查看PageControl屬性時,一切似乎都是有序的。 PageCount預計為3,我可以在評估器中看到所有頁面及其屬性,包括第0頁的TabVisible
我在Windows 7機器上使用Delphi XE ..有誰知道發生了什么? 我不知所措。
tldr:在設置TabVisible
之前設置PageControl.HandleNeeded
。
這里有一個很好的解釋(由Greg Chapman提供): TabSheet上的TabVisible和索引錯誤
對於將來的SO參考(復制/粘貼):
如果的PageControl的手柄被破壞(如果設置在的PageControl或任何其父窗口的一些屬性將導致調用它可以發生RecreateWnd
),該節省的PageControl在可見標簽TStringList
( FSaveTabs
)。 設置TabVisible
導致調用此例程:
procedure TTabSheet.SetTabShowing(Value: Boolean);
var
Index: Integer;
begin
if FTabShowing <> Value then
if Value then
begin
FTabShowing := True;
FPageControl.InsertTab(Self);
end else
begin
Index := TabIndex;
FTabShowing := False;
FPageControl.DeleteTab(Self, Index);
end;
end;
在調用FPageControl.DeleteTab
期間,如果需要,PageControl將重新創建其句柄。 這樣做時,它會嘗試使用FSaveTabs
重置可見選項卡。 但是,它可能會混淆,因為它添加到FSaveTabs
其中一個選項卡現在是不可見的( TabSheet.FTabShowing = false
)。 這會導致IndexError。 因此,修復方法是確保在設置TabVisible
之前重新創建TabVisible
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.