2013-12-10 2 views
0

Dim fList As New List(Of Form)удалить экземпляр формы из списка (формы)

каждый раз, когда я ударил маркер ..

Dim f As New Form2 
Me.AddOwnedForm(f) 
fList.Add(f) 
f.Show() 

создать экземпляр и добавить его в fList ..

однако, если я закрываю этот конкретный экземпляр, он остается на fList, и всякий раз, когда я нажимаю определенное событие, которое вызывает все из списка, появляется закрытая форма ..

здесь поток моей программы:

Нажмите маркером -> показать форму, добавить в список
Перетащите карту -> скрывает формы
MouseLeave -> показывает скрытые формы
, но когда я вручную закрыть форму, когда я Перетаскивание и MouseLeave появляется снова.

Вопрос: Как я могу удалить добавленный экземпляр на fList, если я его закрою?

Он должен появиться, только если он был открыт снова, щелкнув маркер. надеюсь, вы поняли, что я имею в виду. Благодаря!

ответ

2

Если у вас есть ссылка на форму объекта:

fList.Remove(f) 'f is a reference to a form object 

Документация: http://msdn.microsoft.com/en-us/library/cd666k3e(v=vs.110).aspx

Если вы знаете, индекс формы в списке:

fList.RemoveAt(index) 'removes the item at position of index 

документации : http://msdn.microsoft.com/en-us/library/5cw9x18z(v=vs.110).aspx

Если Вы хотите, чтобы удалить с помощью текста вы можете использовать первый метод, чтобы сделать что-то вроде этого:

For Each f as Form in fList 
    If f.Text = "foo" Then fList.Remove(f) 
    Exit For 
Next 

Или с помощью Linq:

fList.RemoveAll(Function(x) x.Text = "foo") 
+0

будет ли это работать? 'fList.Remove (f.text = какая-то переменная)', и если это так, куда его поместить? - Мне нужно удалить его после того, как я нажму X ​​на экземпляр формы. – AdorableVB

+0

Нет, это не сработает, если вы проверите документацию, которая мне нравится, не существует метода, который принимает логический аргумент. См. Мой обновленный ответ о том, как это сделать. –

+0

Я не даю имена и идентификаторы своим элементам в списке, я новичок в использовании этого, но это может сработать. Мне нужно учиться в первую очередь. Благодарю. но я смотрю на 'fList.Clear()' и добавляю только в настоящее время 'Visible' формы в список, чтобы те были теми, которые вытащили. будут ли это делать добро? Кроме того, я не могу предвидеть, куда я должен поместить код, чтобы он срабатывал, когда я закрываю экземпляр ..:/ – AdorableVB

0

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

Поскольку мне нужно удалить элемент формы в fList, который был один, который был закрыт ..

Public fList As New List(Of Form) 

затем добавили этот код в Form2:

Form1.fList.Remove(Me) 

не знал, что это возможно, но это сработало для меня.

если вы можете увидеть его логически, если я нажму X ​​на форме, он удалит , что форму из списка. так что моя программа будет показывать только выбранные формы.:)

+1

Это просто первый вариант, который я опубликовал в своем ответе, когда вы передаете ссылку на конкретный экземпляр формы к методу remove –

+0

Я думал о первом варианте как о чем-то, что я могу просто добавить в код. но так как у моего списка нет имен, это удалит, я не знаю, какой из них. лол – AdorableVB