У меня есть пользовательский элемент управления tabpage
и 3 страницы свойств для пользовательского элемента управления 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;
}
}
}
}
Пожалуйста, дайте совет, как я могу достичь желаемой функциональности, в которой я могу показать диалоговое окно и загрузить страницы свойств (обработка) позже.