Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с отображением свойства-структуры в Prope, Структура не отображается как структура 
:(
    Опции темы
1datr
Дата 27.6.2013, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Есть структуры 
Код

// цветовая схема
    [System.SerializableAttribute]
    public struct millercolorscheme {
        public System.Drawing.Color BorderColor;
        public System.Drawing.Color BackColor;
    }


 и /* Структура цветовая схема + спиcок ячеек номерами*/
  
Код
  [System.SerializableAttribute]
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public struct cellclass{
        public millercolorscheme scheme;
        public int[] celllist;
    }



 В создаваемом контроле делаем свойство
Код
// классы ячеек
private Dictionary<string, cellclass> cell_classes;
public Dictionary<string, cellclass> CellClasses
        {
            get {
                return this.cell_classes;
            }
            set {
                this.cell_classes = value;
            }
        }


 Когда объект этого контрола в Property Editor видна коллекция, но она не редактируется.
 Попробовал просто сделать свойство [System.Runtime.InteropServices.ComVisibleAttribute(true)]
 
Код
       public cellclass CellClass 
        {
            get {
                return c1;
            }
            set {
                c1 = value;
            }
        }


 В Property Editor это свойство не отображается как структура. Нет возможности развернуть и редактировать поля. Только надпись miller_lib.controls.cellclass
PM MAIL   Вверх
jonie
Дата 27.6.2013, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата(1datr @  27.6.2013,  13:31 Найти цитируемый пост)

 Попробовал просто сделать свойство [System.Runtime.InteropServices.ComVisibleAttribute(true)]

а позвольте узнать зачем?

Цитата(1datr @  27.6.2013,  13:31 Найти цитируемый пост)

 В Property Editor это свойство не отображается как структура. Нет возможности развернуть и редактировать поля. Только надпись miller_lib.controls.cellclass 

оно и понятное дело. С чего бы студии догадаться как редактировать массив структур...


http://www.rsdn.ru/article/dotnet/PropertyGridFAQ.xml  читайте большой фак, потом вероятно копайте в сторону UITypeEditor и IWindowsFormsEditorService для создания окна редактирования...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
1datr
Дата 2.7.2013, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Спасибо. Теперь возникает пара вопросов:

 Где находится PropertyOrder ? Всмысле область имен какая?

 Есть свойство-класс в нем есть вложенное свойство-класс. Но когда меняешь свойство вложенного класса не происходит выполнение метода set для данного свойства основного класса. Короче, нет механизма вызова от вложенных свойств к родительским классам и тд до основного.
PM MAIL   Вверх
gambit
Дата 2.7.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Цитата(1datr @  2.7.2013,  09:30 Найти цитируемый пост)
Где находится PropertyOrder ? Всмысле область имен какая?

http://msdn.microsoft.com/en-us/library/mi...r(v=vs.90).aspx

Цитата(1datr @  2.7.2013,  09:30 Найти цитируемый пост)
Короче, нет механизма вызова от вложенных свойств к родительским классам 

для этого есть события 

Это сообщение отредактировал(а) gambit - 2.7.2013, 12:05
PM MAIL ICQ Skype   Вверх
1datr
Дата 2.7.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Цитата(gambit @ 2.7.2013,  12:02)
для этого есть события

Насчет этого поподробнее. Пример желательно

Это сообщение отредактировал(а) 1datr - 2.7.2013, 12:16
PM MAIL   Вверх
gambit
Дата 2.7.2013, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



1datr, мне кажется, что вы несколько рано полезли расширять IDE для языка, который вы не знаете

http://www.rsdn.ru/article/dotnet/delegat.xml
PM MAIL ICQ Skype   Вверх
1datr
Дата 2.7.2013, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Всмысле, как в подобных случаях используются события
PM MAIL   Вверх
jonie
Дата 3.7.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата(1datr @  2.7.2013,  10:30 Найти цитируемый пост)

 Есть свойство-класс в нем есть вложенное свойство-класс. Но когда меняешь свойство вложенного класса не происходит выполнение метода set для данного свойства основного класса. Короче, нет механизма вызова от вложенных свойств к родительским классам и тд до основного. 

очень смахивает на то что вам надо INotifyPropertyChanged реализация или подобная:
Код

class Parent {
  Child  _child;
 public Parent() {
   _child = new Child();
   _child.SizeChanged += OnChildSizeChanged;
  }

 public void OnChildSizeChanged(object sender, EventArgs e) {
  Debug.Print("OnChildSizeChanged");
 }
}

class Child {
  private int _size;
  public int Size {
    set { _size = value; RaiseSizeChanged(); }
    get { return _size; }
  }

 void RaiseSizeChanged() {
  var t = OnSizeChanged;
  if(t!=null) t(this, EventArgs.Empty);
 } 

 public event EventHandler SizeChanged;
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0984 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.