У меня есть User Control с редактором String Collection, в котором я сохраняю список имен табуляции следующим образом:проверить, есть ли изменения в System.Windows.Forms.Design.StringCollectionEditor, чтобы вызвать событие изменения свойства PropertyGalue в C# Winforms
[Editor(@"System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
public List<string> TabPages {
get {return tabpages;}
set {
tabpages = value;
}
}
Эта функция служит также представляется как и в свойстве сетки:
Я хочу знать, как можно знать, если изменение произошло в коллекции.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя изменения в коллекции сохраняются после сохранения изменений, я не знаю, как написать событие, чтобы проверить, изменилась ли эта коллекция.
Для свойства как BackColor
, я в состоянии обнаружить изменения, как так:
if (e.ChangedItem != null && e.ChangedItem.Label == "BackColor" && ((Color)e.ChangedItem.Value).ToArgb() == Color.Transparent.ToArgb()) {
e.ChangedItem.PropertyDescriptor.SetValue(propertyGrid1.SelectedObject, e.OldValue);
}
в функции:
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e);
, что связано с моим PropertyGrid так:
this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGrid1_PropertyValueChanged);
Однако с коллекцией изменение в StringCollectionEditor не обнаружен в этом же процессе.
Есть специальный EventHandler, связанный с StringCollecitonEditor, что мне нужно, чтобы подписаться на? или, возможно, есть какой-то способ изменить декларацию.
Буду благодарен за любую помощь в этом направлении.
[Изменено]
Мои ограничения:
- я использую VS 2010 с точкой чистого 3,5. мой проект должен оставаться в dot net 3.5, потому что все наши решения требуют обратной совместимости с этой версией.
Я нашел [это] (https://social.msdn.microsoft.com/Forums/windows/en-US/571fcee9-652b-43a0-b71e-b3ab956f388d/propertygrid-collection-editing-how- can-i-know-when-collection-was-changed? forum = winformsdatacontrols), вы можете попробовать использовать наблюдаемую коллекцию (тогда у вас будет событие), или вы всегда можете сделать собственный редактор. Что касается 'PropertyValueChanged', то причины, по которым он не запускается, потому что вы не меняете значение этого свойства (' PropertyGrid' позволяет вам редактировать свойство только для getter). – Sinatr
Я не могу изменить его на наблюдаемый коллектив в моем случае, это всего лишь список строк, к которым я позже связываю свои свойства во время выполнения. Не уверен, смогу ли я сделать пользовательский редактор во времени :( –
Являются ли какие-либо события запущенными после закрытия StringCollectionEditor? Я ищу механизм, который затем может вызывать внешнее событие PropertyGalal Property Property объекта PropertyGalue –