Zapamiętywanie danych w Liście

Odpowiedz Nowy wątek
2014-12-21 16:11
Riw
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 ?

Pozostało 580 znaków

2014-12-21 16:17
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;}

Pozostało 580 znaków

2014-12-21 17:07
Riw
0

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

Pozostało 580 znaków

2014-12-21 17:10
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.

Pozostało 580 znaków

2014-12-21 17:17
Riw
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();
        }
 
    }
}
 
Jeszcze pokaż gdzie dodajesz i gdzie sprawdzasz że lista jest pusta. - dam1an 2014-12-21 17:22
@dam1an W Designerze - Riw 2014-12-21 17:45

Pozostało 580 znaków

2014-12-21 21:30
Riw
0

W designerze

Pozostało 580 znaków

2014-12-21 21:36
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.

edytowany 1x, ostatnio: dam1an, 2014-12-21 21:46

Pozostało 580 znaków

2014-12-21 22:26
Riw
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

Nie musisz nic wrzucać, już to ogarnąłem. Nie rozumiem tego u mnie ta lista zawsze jest nullem. - dam1an 2014-12-21 23:08

Pozostało 580 znaków

2014-12-21 22:29
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.

Raczej tylko na properties, tego pola nawet nie będzie widać w designerze. - dam1an 2014-12-21 23:00

Pozostało 580 znaków

2014-12-21 23:33
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

@dam1an w WF jest jedynie zakładka Properties i Events z tego co widze - Riw 2014-12-22 18:53
No wiem, dlatego nie można z designera dodać nic do pola obiektu. - dam1an 2014-12-22 18:55

Pozostało 580 znaków

2014-12-22 18:58
Riw
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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