Dodanie elementu do listy utworzonej w innym formularzu

0

Cześć.
Mam dwa formularze, główny na którym jest przycisk który otwiera nowy formularz w którym chcę dodawać nowe obiekty do utworzonej listy.
Lista ma być dostępna globalnie tak żebym ją mógł wyświetlać w głównym formularzu a dodawać elementy w innym. W którym miejscu powinienem utworzyć listę?
Form1, gdzie docelowo będę wyświetlać listę:

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

namespace Rachunki
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {

            List<Rachunek> rachunek = new Rachunek();//utworzenie listy rachunek.Gdzie to wpisać aby lista rachunek była widoczna w form2?
        }

        private void bDodaj_Click(object sender, EventArgs e)
        {
            FDodaj fDodaj = new FDodaj();//pokazanie nowego okna
            fDodaj.Show();
        }
    }
}

Form2 gdzie chcę dodawać elementy do listy.

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

namespace Rachunki
{
    public partial class FDodaj : Form
    {
        public FDodaj()
        {
            InitializeComponent();
        }

        private void bAnuluj_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void bZatwierdz_Click(object sender, EventArgs e)
        {
            rachunek.Add(jakis obiekt)//tutaj chcę dodać rachunek do listy rachunek
        }
    }
}

Przy tym kodzie Form 2 nie widzi nazwy rachunek.

2
specjal1990 napisał(a):

Cześć.

Cześć

Przy tym kodzie Form 2 nie widzi nazwy rachunek.

Wprowadzasz nas w błąd. Kod w wielu miejscach musi rzucać komunikatami o błędach kompilacji. Np podstawienie new Rachunek() pod Listę musi zgłaszać błąd.

Mam dwa formularze, główny na którym jest przycisk który otwiera nowy formularz w którym chcę dodawać nowe obiekty do utworzonej listy.
Lista ma być dostępna globalnie tak żebym ją mógł wyświetlać w głównym formularzu a dodawać elementy w innym.

W którym miejscu powinienem utworzyć listę?

Prawie zawsze grzebanie w bebechach innej klasy (formy) jest złe

I prawie zawsze jak dwie Formy muszą / wydaje się ze muszą pracować na wspólnych danych, lekarstwem jest wyrzucenie danych poza obie, do nowej klasy ktora nie jest GUI, ale jest pojemnikiem na dane. Takie coś najczęściej nosi nazwę Model

Kodu nie dam, m.in. ponieważ ty nie przestawiasz kompletu informacji, na czym by go zbudować.
Aby zaprojektować klase modelu, tzreba by omówić pełny projekt danych, jaki ma przechowywać.

2

http://forum.4programmers.net/1208091

    public class BillItem
    {
        public String Title { get; set; }
        public decimal Count { get; set; }
        public decimal Price { get; set; }
    }
    public class Bill
    {
        private List<BillItem> list = new List<BillItem>();
        public void Add(BillItem item) list.Add(item);
        public List<BillItem> data { get { return list; } }
    }
    public partial class Form1 : Form
    {
        private Bill list=new Bill();
        public Form1()
        {
            InitializeComponent();
        }

        private void bDodaj_Click(object sender, EventArgs e)
        {
            new FDodaj(list).Show();
        }
    }
    public partial class FDodaj : Form
    {
        private Bill list;
        public FDodaj(Bill list)
        {
            InitializeComponent();
            this.list=list;
        }

        private void bZatwierdz_Click(object sender, EventArgs e)
        {
            list.Add(new BillItem());
        }
    }
0

Próbowałem to zastosować w moim programie i coś mi nie wychodzi.
Postanowiłem wpisać powyższy kod żeby przeanalizować to u mnie.
Nazwałem formularze i przyciski tak jak wyżej i Visual Studio ciągle zgłasza mi błąd w klasie Bill.Nie można niejawnie przekonwertować typu BillItem na System.Colection.Generic.List<bill.BillItem>
![xxx.jpg]xxx.jpg

0
specjal1990 napisał(a):

i Visual Studio ciągle zgłasza mi błąd w klasie Bill.Nie można niejawnie przekonwertować typu BillItem na System.Colection.Generic.List<bill.BillItem>

A podobno w twojej pierwotnej wersji nie było identycznego komunikatu?
Jaka jest prawda?

0

W mojej wersji błędy były zgłaszane przy próbie odwołania się do listy w drugim formularzu. A tutaj są zgłaszane tylko w tym miejscu co zaznaczyłem. Czyli jest już lepiej. W formularzach są ok. Nie potrafię tego problemu przeskoczyć...aby lista była widoczna w wielu formularzach to musi być zadeklarowana w klasie tak?

0

Chyba czegoś tutaj nie potrafie zrozumieć i jestem w martwym punkcie.
Może dla ułatwienia zrozumienia tego uprośćmy sobie problem.
Mam dwa formularze:
Form1 wyświetla listę
Form2 dodaje elementy do listy
lista to po prostu zwykła lista z elementami typu string np imiona. Nie mieszajmy na razie z obiektami dla ułatwienia.
Jak to powinno poprawnie wyglądać?

1
specjal1990 napisał(a):

Chyba czegoś tutaj nie potrafie zrozumieć i jestem w martwym punkcie.
Może dla ułatwienia zrozumienia tego uprośćmy sobie problem.
Mam dwa formularze:
Form1 wyświetla listę
Form2 dodaje elementy do listy
lista to po prostu zwykła lista z elementami typu string np imiona. Nie mieszajmy na razie z obiektami dla ułatwienia.
Jak to powinno poprawnie wyglądać?

Cokolwiek byśmy ci tu napisali, że powinieneś zrobić, ale nie napiszemy gotowca - nie jesteś w stanie tego przełożyć na kod.
Kopiujesz jakieś fragmenty, ale nie umiesz tego niby własnego kodu przeczytać, nie rozumiesz, bo nie znasz podstaw.

Zostaw te Formy, bo nic na tym nie zrozumiesz, zacznij coś podstawego.
Zanim zagrasz IX symfonię, musisz poznać nuty i akordy, nie ma innej ścieżki

Z tym że to ci niewiele pomoże, bo jak wiesz który wiersz i masz komunikat i nadal nie wiesz jak poprawić to musisz wrócić do podstaw, czyli jakiś kurs z podstawami. — _13th_Dragon 27 minut temu

Nie da sie tego dokładniej powiedzieć

0

Ok rozumiem. Chciałem po prostu uczyć się robiąc jakiś praktyczny program.Bo czytanie kursów, oglądanie kursów na youtubie jakoś nie pozwala mi wszystkiego zapamiętać a raczej wolę to przepraktykować w jakimś wymyślonym swoim problemie. Za zadanie sobie postawilem zrobić aplikacje z rachunkami domowymi. I w aplikacji konsolowej w miarę to ogarnąłem. Dodaje rachunki, mogę je przeglądać, przeglądać dany miesiąc itp. Wszystkie dane zapisują się w pliku. I myślałem że po prostu fajnie było by to jakoś ładniej wyświetlać niż w konsoli dlatego zacząłem te Formy.

1

Ja uważam, że masz w tej chwili GIGANTYCZNY kłopot. Nie umiesz dzielić problemu na logiczne fragmenty i na nich operować. Powinieneś wziąć najmniejszy możliwy przykład który spróbuje wykonać dokładnie tą operacje z którą masz kłopoty, nic więcej.

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