2013-02-15 3 views
1

Я работаю над приложением vb.net windows. В этом случае у меня есть форма окна, на которой есть несколько текстовых полей и несколько элементов управления. Теперь после загрузки формы я создаю и удаляю несколько элементов управления в этой форме. У меня также есть кнопка сброса в форме, поэтому пользователь может нажать на нее, чтобы получить оригинальный дизайн формы. Я попытался вызвать метод InitializeComponents(). Но он не отражает никаких изменений в форме. Как получить мой оригинальный дизайн при нажатии кнопки?Как вернуть форму в исходное состояние?

Хорошо, мне нужно изменить свой вопрос. Я не хочу перепроектировать все элементы управления, но только дерево, которое я изменил.

ответ

2

«Оригинальное» состояние/настройки формы Windows не отслеживаются нигде. Изменения, которые вы делаете во время выполнения (добавление, изменение размера, удаление и т. Д.), Все происходят в режиме реального времени и становятся текущими, а - только состоянии формы.

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

Более простым решением является просто уничтожить текущую форму и заменить ее на вновь созданную. Конечно, когда будет создана новая форма, она будет иметь состояние по умолчанию, которое именно то, что вы хотите.


Edit: Вызов InitializeComponents() не является идеальным решением. Причина в том, что он не называется ReinitializeComponents(). Он предназначен для выполнения начальной инициализации , когда форма сначала создается и отображается. Он не был разработан для повторного вызова кода клиента. Если вы все равно это сделаете, все будет в порядке.

Если узлы дерева - это единственное, что вас беспокоит в отношении сохранения, почему бы не объявить члена класса, чтобы удерживать те, которые вы удаляете? Вы можете использовать что-то вроде коллекции Queue или Stack, чтобы удерживать их после их удаления и выталкивать их обратно, когда вы хотите восстановить их в TreeView.

+0

На самом деле у меня есть древовидная структура на форме. Теперь изначально это treeview позволило сказать 10 узлов, я удалил 5 узлов. Теперь перед вызовом InitializeComponents() в дереве есть 5 узлов, и после вызова метода, который я вижу в ближайших окнах, в дереве есть 10 узлов. Но единственная проблема заключается не в форме. Я также использовал метод me.refresh(), но не работал. И я также теряю все связанные события. –

+0

спасибо за объяснение bout InitializeComponent Cody. Вы правы, это просто вопрос дерева. Но тогда как я могу это сделать? Лемм читал об этой коллекции очередей и стеков. –

1
Public Sub resetform(ByVal form_name as Form) 
    form_name.dispose 
    form_name.show 
End Sub 

Вызовите resetform на кнопке мыши события

resetform(YourFormName) 
+0

Ok lemme редактируйте мой вопрос здесь. Я не хочу, чтобы все мои элементы управления были редизайном, но только treeview. Как мне это сделать? –

+0

так что ваше дерево содержит что-то с самого начала? Затем вы хотите сбросить его до этого значения после внесения изменений, если я исправлю? –

+0

yaa lemme объясняет, что происходит. Treeview фактически содержит имя нескольких отчетов. Теперь пользователь выбрал несколько из них в качестве своих фаворитов. Теперь у моего дерева есть 100 отчетов изначально.Теперь при загрузке я вызываю функцию LoadFavorites, которая удаляет все дополнительные отчеты. Поэтому пользователи видят только своих фаворитов. Но есть кнопка «Показать все отчеты». Теперь, когда пользователи нажимают на них, они должны иметь возможность видеть все имена снова. Надеюсь, я был в этом вопросе. –

0

Я просто работал вокруг и его сделали в настоящее время. Я взял переменную как treenode и назначил Clone исходного дерева. Наконец, просто добавьте эту переменную в мое дерево.

+1

Осторожно с этим. Метод ['Clone'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.clone.aspx) создает * мелкие * копии, поэтому, если вы удалите элементы TreeNode, когда вы удаляете их из TreeView, вы можете полностью их потерять. Вам нужно позаботиться о том, чтобы вы не столкнулись с небольшими ошибками и неожиданным поведением мусора. –

+0

Спасибо, Коди Серый, на самом деле вы правы, вот что произошло. Но тогда я не нашел никакого решения, поэтому мне пришлось работать с 2 древовидными изображениями. –

Смежные вопросы