Страница: 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 |
Поиск по форуму