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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пометил [NonSerialized], а он всёравно ругается 
:(
    Опции темы
Kakadu
Дата 30.4.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть вот такой класс.
Код

    [Serializable]
    public class Graph {
        #region Private fiels
        [NonSerialized]   
        private GraphDrawer _gDrawer;

        private readonly List<GraphElement> _sons = new List<GraphElement>();

        #endregion    
        #region Properties
        public GraphDrawer Drawer {
            set {
                //if (_gDrawer == null)
                    _gDrawer = value;
            }
        }
        public List<GraphElement> Sons {
            get {
                return _sons;
            }
        }
        #endregion
        #region Public methods
        public void AddSon(GraphElement el) {
            _sons.Add(el);
            if (_gDrawer == null)
                throw new Exception("gDrawer Equals null");
            
            el.PropertyChanged += _gDrawer.Draw;
            _gDrawer.AddGraphElement(el);
        }
        #endregion
    }

Я запускаю его сериализацию, а он гаворит что GraphDrawer не помечен как сериализуемый.
Код

  public class GraphDrawer {
        #region Private fields
        Expect _expected = Expect.None; 
        private readonly Panel _dPanel;
        Reflector reflector;
        private Graph _graph;
        private readonly Dictionary<GraphElement, ShapeControl.ShapeControl> _controls = new Dictionary<GraphElement, ShapeControl.ShapeControl>();
        #endregion

        #region Constructors
        public GraphDrawer(Panel panel) {
            _dPanel = panel;
            reflector = new Reflector(null);
        } 
        #endregion
        
        #region Properties
        public Control PropControl {
            get { return reflector.Container; }
            set {
                reflector.Container = value;
                // Todo: What happens if user will set the same control more then one time?
                reflector.Container.Click += AddMouseClickHandler;
            }
        }



        public Graph Graph {
            set {
                if (_graph == null)
                    _graph = value;
            }
        }
        public Expect Expected {
            get { return _expected; }
            set { _expected = value; }
        }
        #endregion

        #region Private methods
        void AddMouseClickHandler(object sender, EventArgs e) {
            
        }
        #endregion
        #region Public Methods
        public void Draw(object sender, PropertyChangedEventArgs args) {
            Graphics g = Graphics.FromHwnd(_dPanel.Handle);
            g.Clear(Color.GhostWhite);
            
            foreach (GraphElement el in _graph.Sons) {
                
                if (el is Edge) {
                   /* g.FillEllipse(Brushes.YellowGreen,
                        ((Edge)el).Left, ((Edge)el).Top,
                        ((Edge)el).Width, ((Edge)el).Height);

                    g.DrawEllipse(new Pen(Color.Goldenrod, el.BorderWidth),
                                            ((Edge)el).Left, ((Edge)el).Top,
                                            ((Edge)el).Width, ((Edge)el).Height);
                    */
                } else if (el is Vertex) {
                    Vertex v = el as Vertex;
                    if ((v.StartEdge == null) || (v.EndEdge == null))
                        Console.WriteLine("Can't redraw vertex " + v.Id);
                    else
                        g.DrawLine(new Pen(Brushes.Black, v.BorderWidth),
                            v.StartEdge.GetCenterPoint().X, v.StartEdge.GetCenterPoint().Y,
                            v.EndEdge.GetCenterPoint().X, v.EndEdge.GetCenterPoint().Y);
                } else {
                    Console.WriteLine("Nothing");
                }
            }
            
        }
        public void AddGraphElement(GraphElement el) {
            if (el is Edge){
                Edge edge = (Edge)el;
                
                ShapeControl.ShapeControl shape = new ShapeControl.ShapeControl();
                shape.Shape = ShapeControl.ShapeType.Ellipse; 
                
                shape.Width = edge.Width;
                shape.Height = edge.Height;
                shape.Left = edge.Left;
                shape.Top = edge.Top;  
                shape.ForeColor = Color.Blue;
                shape.BorderColor = Color.Red;
                /*shape.Click += delegate {
                    reflector.Extract(edge);
                };
                shape.LocationChanged += delegate {
                    edge.Location = new Point(shape.Left, shape.Top );
                };*/
                
                _controls.Add(edge, shape);
                _dPanel.Controls.Add(shape);
            } 
        }
        #endregion
    }



--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
-Mikle-
Дата 30.4.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Думаю он ругается на 
public GraphDrawer Drawer {....


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Kakadu
Дата 30.4.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нет, убрать свойство я пробовал.


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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