Если основной форме требуется доступ для чтения / записи, а для других форм нет, тогда я бы сделал коллекцию свойством главной формы, доступным только для чтения / записи внутри вашей формы, но предназначенным только для чтения извне формы. Вы можете сделать это, используя что-то вроде:
C #
private myCollection _MyCollection;
public myCollection MyCollection {
get { return _MyCollection.AsReadOnly(); }
private set { _MyCollection = value; }
}
VB
Private _MyCollection As myCollection
Public Property MyCollection() As myCollection
Get
Return _MyCollection.AsReadOnly
End Get
Private Set(ByVal value As myCollection)
_MyCollection = value
End Set
End Property
Затем вы можете ссылаться на свою коллекцию изнутри формы, ссылаясь либо на MyCollection, либо на _MyCollection, как вы выберете, но снаружи формы коллекция будет доступна только для чтения и, следовательно, не будет редактироваться.
Редактировать: После того, как вы отредактировали, все выглядит так, как будто вы нуждаетесь в одиночке, как предполагалось ранее, это означает, что все экземпляры ваших форм должны иметь возможность редактировать эта коллекция или нет? Если это так, поместите вашу коллекцию в статический класс:
Private _MyCollection as myCollection = Nothing
Public Shared ReadOnly Property MyCollection() As myCollection
Get
If _MyCollection is Nothing Then _MyCollection = New myCollection
Return _MyCollection
End Get
End Property
Теперь при первом обращении к коллекции из одной из ваших форм будет создана новая коллекция, из которой вы сможете добавлять / удалять элементы. Каждый раз, когда вы ссылаетесь на коллекцию из этой или одной из ваших других форм, она уже будет создана, поэтому она вернет коллекцию, которая была первоначально создана. Однако ни одна из форм не сможет установить новую коллекцию, просто укажите ссылку на экземпляр, созданный с помощью одноэлементного шаблона.