Zapamiętywanie danych w Liście

0

Witam,mam pewien problem z dodawaniem punktów do listy w Designerze:Napisałem taki oto kod C#

 
public int MinValue
        {
            get { return Minvalue; }
            set { Minvalue = value; }
        }
        public int MaxValue
        {
            get { return Maxvalue; }
            set { Maxvalue = value; }
        }
        public List<Point> Points
        {
            get { return points; }
            set { points = value; }
        }

Co do MinValue i MaxValue wszystko działa tak jak chce - wartości są zapisywane natomiast gdy dodaję Punkty do listy to gdy skończe dodawać to lista się czyści.
Jak pozbyć się tego błędu ?

0

Pokaż więcej kodu, bo na podstawie tego raczej nikt nic nie wywnioskuje.
Po co te property tak rozwijać jeśli nic w nich nie robisz, wystarczy zwykłe public MinValue {get; set;}

0

No ale to jest cały kod który tego dotyczy

0

Ale tu się nic nie dzieje, kod jest w porządku jeśli prawidłowo dodajesz do listy to nic się nie powinno kasować. Może masz dwie instancje tej klasy do jednej dodajesz a z drugiej chcesz pobrać czy coś takiego.

0

Oto cały kod tej klasy:

   using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace EBinder.CustomControls.Charts
{
    public class LinearChart : Control
    {
        public Pen MyPen;

        public static List<Point> points;

        public int Maxvalue;
        public int Minvalue;
        public int zero = 0;

        public LinearChart()
        {
            this.SuspendLayout();
        }
        public int MinValue
        {
            get { return Minvalue; }
            set { Minvalue = value; }
        }
        public int MaxValue
        {
            get { return Maxvalue; }
            set { Maxvalue = value; }
        }
        public List<Point> Points { get; set; }
       

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;
            
            MyPen = new Pen(Brushes.Black, 2);
            
            g.DrawLine(MyPen, new Point(20, 50), new Point(20, Height - 20));// Oś Y
            g.DrawLine(MyPen,new Point(25,65),new Point(20,50));//Strzałka Y                                                                    
            g.DrawLine(MyPen,new Point(14,65),new Point(20,50)); //Strzałka Y

            g.DrawLine(MyPen, new Point(20, Height - 20), new Point(Width - 50, Height - 20)); //Oś X
            g.DrawLine(MyPen,new Point(Width - 50,Height - 20),new Point(Width - 65,Height - 5));//Strzałka X
            g.DrawLine(MyPen, new Point(Width - 50, Height - 20), new Point(Width - 65, Height - 35));//Strzałka X

            g.DrawString(this.Text,new Font("Segoe UI",12),Brushes.Black,new PointF(Width/2 - 5 - 45,5)); // Tytuł Wykresu
            g.Dispose();
        }
       
    }
}

 
0

W designerze

0

Jak można dodać coś do listy w designerze?
Przyznaje że słabo znam WF, wolę WPF i być może o czymś takim nie słyszałem, ale wydaje mi się że to czarna magia jakaś :P

Edit: Chyba wiem, ty to dodajesz do Controls pewnie.

0

@dam1an w designerze po zadeklarowaniu listy w ten sposob co ja zrobilem pojawia sie ona w sekcji Properties w designerze,potem moge tam dodawac rzeczy rozne.W przypadku int wszystko dziala lecz w przypadku listy designer o wszystkim zapomina :(
Jak bede na komputerze to podrzuce tu zdjecia calego "procesu" dodawania tych punktow

0

Być może designer operuje tylko na obiektach ? Więc jak masz coś statycznego to nie dasz rady zmienić. Spróbuj dać listę jako zwykłe pole.

1

Nie wiedziałem o czymś takim. W takim razie którą listę ty sprawdzasz?

public partial class CustomControl2 : Control
    {
        public CustomControl2()
        {
            InitializeComponent();
        }

        public List<Point> Points { get; set; }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);

            System.Diagnostics.Debug.WriteLine("Liczba elementów: " + Points.Count);

        }
    }

I działa.
Tylko ty te elementy będziesz miał w tej liście

public List<Point> Points { get; set; }

a nie w tej statycznej. Dodajesz elementy w zakładce Properties a nie Fields

0

@dam1an sprawdziłem twój przykład i on również w Designerze nie wyświetla wyników uporczywego dodawania punktów :P

0

A jak debugujesz, to masz w liście coś?

1

Przerobiłem przykład @dam1an powinien działać:

public partial class CustomControl2 : Control
{
   public CustomControl2()
   {
      InitializeComponent();
      Points = new List<Point>();
   }

   [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
   public List<Point> Points { get; set; }

   protected override void OnPaint(PaintEventArgs pe)
   {
      base.OnPaint(pe);

      System.Diagnostics.Debug.WriteLine("Liczba elementów: " + Points.Count);

   }
}

Pamiętaj żeby poczekać z debuggowaniem aż przejdzie InitializeComponent w formie do której dodałeś UserControl bo tam są zapisane wartości które podałeś w designerze.

0

OK,kod @DibbyDum to to czego potrzebowałem,co prawda Avast sie przypinał do tego atrybutu nie wiem czemu,ale już jest dobrze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1