Prakash1206 Ответов: 2

Док-панель люкс Weifenluo: добавьте в элемент управления TabControl &амп; скрытие формы


Я новичок в Dockpanel Suite.
чего я пытаюсь добиться, так это наличия компонента Dockpanel(с DocumentStyle = DockingMdi) внутри TabControl в Winforms.
Если я установлю DocumentStyle на DockingWindow или DockingSdi, он будет работать нормально, но меньше вариантов стыковки

SecondForm ^SF = gcnew SecondForm ();
SF->Show(dockPanel1, DockState::Document);


установка DocumentStyle в DockingMdi я получаю сообщение об ошибке во время выполнения

Необработанное исключение типа ' System.InvalidOperationException ' произошло в WeifenLuo.WinFormsUI.Docking.dll
Дополнительная информация: недействительная родительская форма. При использовании DockingMdi или стиль SystemMdi документов, контроль док-панели должны быть контролировать ребенка от основного контейнера MDI-форме.


я добавил mf - & gt;Parent = this; выше SF - & gt;Show (), я получаю новую ошибку времени выполнения, говорящую

Необработанное исключение типа ' System.ArgumentException ' произошло в системе.Окна.Forms.dll
Дополнительная информация: элемент управления верхнего уровня не может быть добавлен к элементу управления.


Мой второй вопрос: Как скрыть плавающие формы?
если все формы закреплены в DockPanel, функция скрытия работает хорошо,
если я вызову dockpanel1- & gt;Hide (); после создания одной формы float, кроме плавающей формы, все остальное будет скрыто
для этого должен быть какой-то обходной путь. пожалуйста, поделитесь своими мыслями

Спасибо

Что я уже пробовал:

размещение dockpanel вне tabcontrol заставляет его работать (с DocumentStyle, установленным в DockingMdi)

2 Ответов

Рейтинг:
7

Prakash1206

Я надеюсь, что это поможет кому-то с той же проблемой. dockPanel1 = nullptr; в данном случае это не помогает. используя приведенный ниже код, мы можем безопасно удалить содержимое из dockPanel.

if (dockPanel1->DocumentStyle == DocumentStyle::SystemMdi)
	{
		for each(Form ^form in MdiChildren)
			form->Close();
	}
	else
	{
		for (int index = dockPanel1->Contents->Count - 1; index >= 0; index--)
		{
		 if (dynamic_cast<idockcontent^>(dockPanel1->Contents[index]) != nullptr)
		 {
          IDockContent ^content = safe_cast<idockcontent^>(dockPanel1->Contents[index]);
		  content->DockHandler->Close();
		 }
		}
	}


Рейтинг:
1

JayantaChatterjee

TabControl-это контейнерный элемент управления, который не может иметь элемент управления верхнего уровня или MDI(которые содержат несколько форм), поэтому то, что вы пытаетесь сделать, не разрешено элементом управления..

Ответ на второй вопрос:-
сначала найдите свою форму, а затем спрячьте ее..
код есть:-

Form childFrm = this.MdiChildren.First(frm => frm.Name.Equals("findFormName"));
            if (childFrm != null)
            {
                childFrm.Hide();
            }

Надеюсь, это вам поможет..


Prakash1206

Привет Спасибо за ответ,
я не мог уследить за ответом на второй вопрос. я кодирую на C++/Cli.
так что не знаю о операторе '=>', Я не думаю, что он доступен на этом языке. кроме того, я не вижу функции "First" от MdiChildren в Visual studio.
Не могли бы вы объяснить свой код немного подробнее? так что я постараюсь перейти на C++/Cli
Спасибо и с уважением

JayantaChatterjee

извините, код, я не видел тега C++...
это не в коде C++, это в коде C++. C#.net...
вы можете получить справку перейдя по этой ссылке:-

https://www.google.co.in/?gfe_rd=cr&ei=ctZwV-zoGtDk8Aey85MY&gws_rd=ssl#q=dockpanel+suite+documentation