2
我有一個tabpage
用戶控件和3個屬性頁,用於tabpage
用戶控件,它們是動態分配的。該tabpage控件將顯示在對話框中。如何在顯示Windows對話框後進行處理?
對於tabpage控件的數據處理和過濾需要更多的時間,並且這會導致在打開對話框之前出現超過10秒的繁忙圖標。
我想顯示一個空的Dialog
打開並顯示繁忙的圖標,同時處理和數據過濾完成並最終顯示在Dialog
內部。
這基本上改變了處理的順序。
但是,我無法做到這一點,並且一旦打開對話框,它將等待用戶輸入,並在給出輸入後纔會進入下一行。 (如在調試期間觀察到的)。
在下面的代碼中,行MnemonicSelector.InitializeMnemonicSelectorParameters(parameters);
負責處理和移動showdialog後導致對象未找到操作,當用戶單擊對話框下屬性頁面內的任何項目。
public override MnemonicSelectorResult ShowMnemonicSelector(MnemonicSelectorSearchParameters parameters)
{
MnemonicSelector.InitializeMnemonicSelectorParameters(parameters);
ResizeMnemonicSelectorIfNeeded();
SetupMnemonicDialog(m_PropertyDialog, MnemonicSelector, MnemonicSelector.Title);
DialogResult dResult = ShowFakeDialog(m_PropertyDialog, MnemonicSelector.Title);
return MnemonicSelector.Result;
}
private void ResizeMnemonicSelectorIfNeeded()
{
if ((MnemonicSelector.ClientSize.Width < 909) || (MnemonicSelector.ClientSize.Height < 620))
m_PropertyDialog.ClientSize = new System.Drawing.Size(939, 697);
}
protected void SetupMnemonicDialog(PropertiesDialogControl propertydialog, PropertyPage page, string title)
{
List<PropertyPage> pages = new List<PropertyPage>();
pages.Insert(0, page);
PropertyPage[] propertyPages = pages.ToArray();
if (title != null)
propertydialog.Text = title;
propertydialog.SetPropertyPages(new List<PropertyPage>(propertyPages));
}
public virtual DialogResult ShowFakeDialog(Control contents, string title)
{
return ShowFakeDialog(contents, title, false, "");
}
public DialogResult ShowFakeDialog(Control contents, string title, bool isCancelButtonVisible, string cancelButtonText)
{
FakeDialog fakeDialog = new FakeDialog(this, contents, title, isCancelButtonVisible, cancelButtonText);
using (fakeDialog)
{
lock (this)
{
FakeDialog previousFakeDialog = _activeFakeDialog;
_activeFakeDialog = fakeDialog;
try
{
return fakeDialog.ShowDialog();
}
finally
{
_activeFakeDialog = previousFakeDialog;
}
}
}
}
請指點上我能實現所需的功能,其中,我可以顯示對話框,後來加載屬性頁(處理)。
這是C#的問題嗎? – VMAtm
顯示一個對話框不可用10秒對用戶沒有幫助。使用BackgroundWorker獲取數據,以便UI不會凍結。顯示一個litte「我正在處理它,而不是死」窗口,同時它在一個像marquee模式下的進度條一樣的動畫中運行。關閉該窗口並在RunWorkerCompleted事件處理程序中顯示對話框。 –