Пользовательский элемент управления, который действует как стандартное окно, ограничивается только панелью - PullRequest
1 голос
/ 04 июля 2011

Я создаю программу для генерации кода для меня, и я создаю интерфейс после Game Maker из-за легкости интерфейса. У него есть SplitContainer с Panel1, содержащим TreeView, и Panel2, содержащая произвольное количество автономных окон (реальные окна, а не какой-то хакерский обходной путь). Я хотел использовать пользовательские элементы управления для хранения элементов управления, которые я использую для изменения вещей, но я не могу придумать способ поместить его в окно внутри Panel2 контейнера splitContainer. Кто-нибудь может мне помочь?

Вот хороший пример:

http://i.stack.imgur.com/CG6kO.png

Эти два окна свойств спрайта - вот что я пытаюсь сделать.

Ответы [ 4 ]

2 голосов
/ 04 июля 2011

я думаю, что то, что вы ищете, называется mdi-container

, однако единственный реальный контейнер mdi, который я видел до сих пор (в .NET) - это форма ... к сожалению, нет панели или чего-то подобного...

но если вам нужен только эффект "окна в окне": просто создайте новую форму, установите для свойства TopLevel этого экземпляра значение false и добавьте экземпляр в свою форму/ панель / сплитконтейнер / любой другой элемент управления

1 голос
/ 04 июля 2011

Вы можете попробовать использовать форму MDI, а для реализации элемента управления TreeView, проверить какую-нибудь панель стыковки. Я использовал этот в прошлом (http://sourceforge.net/projects/dockpanelsuite/).

Это очень гибкий. Вы настраиваете одну из этих форм док-панели, закрепленных слева от формы MDI. Он всегда будет «сверху», и пользователь может изменить его размер точно так же, как элемент управления сплиттером в форме. Если хотите, он также может иметь функцию «автоматического скрытия», которая может или не может быть желательной в вашем случае.

Затем он может содержать ваше древовидное представление, которое может загрузить все дочерние формы MDI, которые вам нравятся.

Вы обнаружите, что не боретесь с тем, как на самом деле хотят себя вести "Windows", и все будет работать намного более гладко.

0 голосов
/ 04 июля 2011

Я однажды сделал подобное, и по этой причине у меня есть метод ReplaceControl, который я вставил ниже:

    static public void ReplaceControl(Control ToReplace, Form ReplaceWith) {
        ReplaceWith.TopLevel=false;
        ReplaceWith.FormBorderStyle=FormBorderStyle.None;
        ReplaceWith.Show();
        ReplaceWith.Anchor=ToReplace.Anchor;
        ReplaceWith.Dock=ToReplace.Dock;
        ReplaceWith.Font=ToReplace.Font;
        ReplaceWith.Size=ToReplace.Size;
        ReplaceWith.Location=ToReplace.Location;
        ToReplace.Parent.Controls.Add(ReplaceWith);
        ToReplace.Visible=false;
    }

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

С Как реализовать форму внутри формы с переключением встроенных форм во время выполнения?

0 голосов
/ 04 июля 2011

Поместите его в коллекцию Control Panel2 с помощью метода Add (), примените координаты, привязку и стыковку программно.

...