簡體   English   中英

如何在最小化窗口的同時將控件動態添加到Windows窗體拆分器控件中?

[英]How do I dynamically add controls into windows form splitter control while window is minimized?

我正在尋找在我們工作室編寫的一個小型.NET應用程序中的錯誤。 該對話框基本上是狀態報告對話框,它會根據當前正在記錄的操作數,嘗試向現有對話框動態添加1(或更多)進度條。

我們有一個對話框,其中包含一個包含拆分器容器的主對話框。 拆分器的下部與一個豐富的edito控件綁定,該控件顯示狀態噴出。 拆分器區域的頂部是我們要動態添加1(或更多)進度條的位置。

在操作過程中,將創建新的進度條,然后通過調整拆分容器面板1的大小來適應新控件,然后將其附加到拆分容器,然后將新控件添加到拆分容器中(代碼如下所示)。 如果未將窗口最小化,則此代碼非常有用。 當窗口最小化時,運行時將引發異常,指示無法調整拆分容器的大小。 具體來說,這是錯誤消息:

An exception of type 'System.InvalidOperationException' has occurred.
Message: SplitterDistance must be between Panel1MinSize and Width - Panel2MinSize.

問題(我認為)是因為將窗口最小化,所以窗口的高度太小,無法調整拆分容器的大小。 我懷疑.NET正在查看窗口的最小大小,而不是正常狀態的大小。

這是代碼(請注意引發異常的行):

// if we don't have any operations yet, add a small top margin
if (splMain.SplitterDistance == 0) {
    splMain.SplitterDistance = 3;      // THE EXCEPTION IS THROWN HERE!!!!
}

ProgressDisplay display = new ProgressDisplay();
display.OperationFinished += OperationFinished;
display.Anchor    = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
display.LabelText = label;
display.Location  = new Point(6, splMain.SplitterDistance);
display.Size      = new Size(splMain.Panel1.Width-12, display.Height);
display.Start(steps);
m_Operations.Push(display);

// add the display to the top panel
splMain.IsSplitterFixed = false;
splMain.SplitterDistance += display.Height + 3;
splMain.IsSplitterFixed = true;
splMain.Panel1.Controls.Add(display);
m_splitterAdjusted = true;

根據調試器,panel1MinSize為0,panel2MinSize為2,Width,父窗口的大小為(160,25)。 因為拆分器是水平拆分器,所以我懷疑例外中的“寬度”實際上是高度,即25,使得例外是SplitterDistance(3),必須在0到0之間-因此是例外。

現在,如果窗口最小化,我只是不添加進度條,但是這樣做的缺點當然是在恢復窗口時不顯示進度條。 我猜另一種解決方案是在還原事件上添加進度條(如果尚未添加)。

我很好奇是否有更好(或不同)的解決方案。 謝謝!

我本來建議使用“不添加”方法,但是我看到您已經這樣做了。

將作業保持待處理狀態,直到發生還原事件為止,然后將其添加,然后將其保留在該位置。 最小化時,窗口沒有大小,因此您根本無法將控件添加到窗體中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM