Страница: 1 | 
		
		
			
	
		 
		
			
  
    |   | 
    
Вопрос: Не могу разобраться со списковым свойством в Prope
     | 
    
Добавлено: 13.12.10 21:34
     | 
      | 
  
		
			
			  
    
      
Автор вопроса:   Luft-on
       | 
    
    
      
Есть у меня такой себе класс, в нём есть код:
 
 
        private List<Account> _accounts;
 
 
        [DisplayName(@"Аккаунты")]
 
        public List<Account> Accounts
 
        {
 
            get { return _accounts; }
 
            set
 
            {
 
                _accounts = value;
 
            }
 
        }
 
 
        [DisplayName(@"Аккаунт")]
 
        public class Account
 
        {
 
            [DisplayName(@"Домен")]
 
            public string Domain { get; set; }
 
            [DisplayName(@"Пользователь")]
 
            public string UserName { get; set; }
 
            [DisplayName(@"Пароль")]
 
            [PasswordPropertyTextAttribute(true)]
 
            public string UserPassword { get; set; }
 
 
            public Account(){}
 
 
            public Account(string userName, string userPassword, string domain)
 
            {
 
                UserName = userName;
 
                UserPassword = userPassword;
 
                Domain = domain;
 
            }
 
 
            public override string ToString()
 
            {
 
                return string.Format("{0}:{1}@{2}", UserName, new String('*', UserPassword.Length), Domain);
 
            }
 
        }
 
 
 
 
Когда я изменяю в редакторе коллекций свойство Accounts, то такое впечатление что не происходит событие, которое должно вызывать конструкцию set у свойства Accounts, ибо если поставить в этом месте бряку, то программа не останавливается. А мне как раз это и нужно - сохранять изменения в настройки.
 
Почему так? Заранее спасибо за ответ!
Ответить
        | 
    
  
		
			
		
		
			
		
	  
    
      
Номер ответа: 1 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #1
       | 
Добавлено:  13.12.10 21:47
       | 
    
    
      | 
Забыл сказать, экземпляр этого класса (внешнего) будет использоваться в качестве свойства SelectedObject у объекта PropertyGrid.
 Ответить
        | 
    
  
	  
	  
    
      
Номер ответа: 3 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #3
       | 
Добавлено:  13.12.10 21:57
       | 
    
    
      | 
 мб надо юзать this.UserName = userName; 
 
 
Это почему же? И какое отношение имеет к свойству Accounts? Но я всё же попробую )
Ответить
        | 
    
  
	  
    
      
Номер ответа: 4 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #4
       | 
Добавлено:  13.12.10 22:18
       | 
    
    
      | 
Попробовал - ноль на массу! Ещё варианты?
 Ответить
        | 
    
  
	  
    
      
Номер ответа: 5 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #5
       | 
Добавлено:  13.12.10 23:03
       | 
    
    
      | 
Попробовал - ноль на массу! Ещё варианты?
 Ответить
        | 
    
  
	  
	  
    
      
Номер ответа: 7 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #7
       | 
Добавлено:  14.12.10 14:04
       | 
    
    
      | 
 Artyom пишет:
 
Не понятно о каком редакторе речь идет.   
 
Стандартный редактор коллекций предоставляемый обычным PropertyGrid'ом
 
Artyom пишет:
 
Это UserControl со свойством? И ты в дизайнере меняешь свойство?   
 
Нет, это экземпляр моего класса, меняю значения свойств в PropertyGrid.
Ответить
        | 
    
  
	  
	  
    
      
Номер ответа: 9 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #9
       | 
Добавлено:  14.12.10 18:12
       | 
    
    
      | 
 .NET Framework
 
Supported in: 4, 3.5, 3.0 
 
А хотелось бы в 2.0 иметь возможность писать.
Ответить
        | 
    
  
	  
	  
    
      
Номер ответа: 11 Автор ответа:
   Luft-on
  
 
  Вопросов: 3 Ответов: 12 
       | 
      
 Профиль |  | #11
       | 
Добавлено:  16.12.10 03:30
       | 
    
    
      
Если кого ещё интересует, то решением для меня оказался такой вот код:
 
-  
 
-         public delegate void ChangedEventHandler(object sender, EventArgs e);
  
-  
 
-         public class AccountCollection : Collection<Account>
  
-         {
  
-             public event ChangedEventHandler Changed;
  
-  
 
-             protected virtual void OnChanged(EventArgs e)
  
-             {
  
-                 if (Changed != null) Changed(this, e);
  
-             }
  
-  
 
-             protected override void InsertItem(int index, Account item)
  
-             {
  
-                 base.InsertItem(index, item);
  
-                 OnChanged(EventArgs.Empty);
  
-             }
  
-  
 
-             protected override void RemoveItem(int index)
  
-             {
  
-                 base.RemoveItem(index);
  
-                 OnChanged(EventArgs.Empty);
  
-             }
  
-  
 
-             protected override void SetItem(int index, Account item)
  
-             {
  
-                 base.SetItem(index, item);
  
-                 OnChanged(EventArgs.Empty);
  
-             }
  
-  
 
-             protected override void ClearItems()
  
-             {
  
-                 OnChanged(EventArgs.Empty);
  
-                 base.ClearItems();
  
-             }
  
-  
 
-             public override string ToString()
  
-             {
  
-                 var s = "";
  
-                 foreach (var account in this)
  
-                 {
  
-                     s += account.ToWithPasswordString() + "|";
  
-                 }
  
-                 return s.Trim(
 
-             }
  
-         }
  
-  
 
-  
 
-         [DisplayName(@"Аккаунты")]
  
-         public AccountCollection Accounts { get; set; }
  
-  
 
-         [DisplayName(@"Аккаунт")]
  
-         public class Account
  
-         {
  
-             [DisplayName(@"Домен")]
  
-             public string Domain { get; set; }
  
-             [DisplayName(@"Пользователь")]
  
-             public string UserName { get; set; }
  
-             [DisplayName(@"Пароль")]
  
-             [PasswordPropertyTextAttribute(true)]
  
-             public string UserPassword { get; set; }
  
-  
 
-             public Account()
  
-             {
  
-                 UserName = "";
  
-                 UserPassword = "";
  
-                 Domain = "";
  
-             }
  
-  
 
-             public Account(string userName, string userPassword, string domain)
  
-             {
  
-                 UserName = userName;
  
-                 UserPassword = userPassword;
  
-                 Domain = domain;
  
-             }
  
-  
 
-             public string ToWithPasswordString()
  
-             {
  
-                 var s = "";
  
-                 if (string.IsNullOrEmpty(UserName)) return "Не указано имя пользователя";
  
-                 s += UserName;
  
-                 if (!string.IsNullOrEmpty(UserPassword)) s += ":" + UserPassword;
  
-                 if (!string.IsNullOrEmpty(Domain)) s += "@" + Domain;
  
-                 return s;
  
-             }
  
-  
 
-             public override string ToString()
  
-             {
  
-                 var s = "";
  
-                 if (string.IsNullOrEmpty(UserName)) return "Не указано имя пользователя";
  
-                 s += UserName;
  
-                 if (!string.IsNullOrEmpty(UserPassword)) s += ":" + new String(
 
-                 if (!string.IsNullOrEmpty(Domain)) s += "@" + Domain;
  
-                 return s;
  
-             }
  
-         }
  
 
  
Ответить
        | 
    
  
Страница: 1 | 
 
		
			Поиск по форуму