Przypisywanie tym samym TextBox różnych wartości, odpowiednich dla wybranego elementu

0

Witam, mam kolejny problem z którym nie wiem jak sobie poradzić.
Stworzyłem sobie ListBox. Dodaję do niej nowy element używając przycisku. Otwiera mi się nowa Forma a w niej 3x TextBox:
-> TeXtBox1 -> dodaje kolejny element do listy,
-> TextBox2 i TextBox3 w nich wpisuje wartości które chcę żeby było kojarzone tylko z TextBox1 (czyli elementem który dodaje do listy).
Naciskam przycisk OK.
Teraz jak wybiorę sobie dodany element na liście klikając na niego, nacisnę kolejny przycisk "wybierz" chcę żeby wyświetliły mi się też wartości TextBox2 i TextBox3.
I teraz jeżeli dodam drugi element do listy i dla niego wpiszę w TextBox2 i TextBox3 inne wartości chcę żeby wybierając z listy drugi element miał on wartości TextBox2 i TextBox3 odpowiednie dla niego ?
Oczywiście cały czas używam tych samych TextBox1 TextBox2 TextBox3, dodatkowo korzystam z Serializacji XML.

EDIT: Teraz wymyśliłem że może przy zapisie do pliku XML będę sprawdzał liczbę elementów na liście, a nazwą pliku będzie kolejny element z listy. To samo ze zmiennymi przechowującymi TextBox2 i TextBox3, tylko nie wiem czy do tego samego pliku XML mogę to zapisywać. Przy wczytywaniu sprawdzę pętlą czy nazwa wybranego element równa się nazwie z listy jeżeli tak to wczytaj dane z pliku XML do zmiennych powiązanych z TextBox1 i TextBox2 i do listy.
Co o tym sądzicie ? Mam nadzieje że cokolwiek zrozumieliście. Innego pomysłu póki co nie mam a i tak nawet nie wiem czy uda mi się zrobić to moim.

0

Mam pytanie dlaczego po wprowadzeniu danych do TextBox1,2 i 3 moje właściwości dalej są puste? co źle robię ?

Moja klasa z właściwościami :

 
(...)
public class Information
    {
        public string VehicleName { get; set; }
        public string Fuel { get; set; }
        public string Engine { get; set; }
    }

moje Form2 w którym wprowadzam dane do TextBox1 TextBox2 i TextBox3 i przypisuje wprowadzony tekst do właściwości poprzez naciśnięcie przycisku.

 public partial class Form2 : Form
    {

        Information info = new Information();

        public Form2()
        {
            InitializeComponent();
        }

        private void buttonAddVehicle_Click(object sender, EventArgs e)
        {
            try
            {
                info.VehicleName = this.textBoxVehicleName.Text;
                info.Fuel = this.textBoxFuel.Text;
                info.Engine = this.textBoxEngine.Text;
                SaveXML.SaveDataString(info, "ListOfDataaa.xml");
            }
            catch(Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }
    }

I mojeForm1 w którym dodaje kolejny element do listy czyli info.VehicleName. Niestety nic się do listy nie dodaje a w pliku XML po zapisie wyświetlają mi się wartości puste

 
public partial class Form1 : Form
    {
        List<string> items = new List<string>();

        Form2 dialog = new Form2();
        Information info1 = new Information();

//DODAWANIE POJAZDÓW DO LISTY        
        private void buttonADD_Click(object sender, EventArgs e)
        {
            

            if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                return;

            items.Add(info1.VehicleName);



            SaveXML.SaveData(items, "ListOfData.xml"); // ZAPIS

            listBoxListOfCars.DataSource = null;
            listBoxListOfCars.DataSource = items;
        }
(...)

Gdzie jest błąd dlaczego nie przypisują mi się wpisane w TextBox wartości do odpowiednich właściwości ?
Dodałem klasę Information żeby łatwiej mi było zapisać właściwości do xml, bo w zapisie podaje object info i się ładnie powinno zapisać inaczej nie umiałem.

Co do zapisywania i wczytywanie z pliku wartości odpowiednich dla odpowiednego elementu wybranego z listy to zmodyfikowałem trochę mój pomysł z wyżej bo on nie działał. I mam nowy. Zapisuję do jednego pliku xml listę pojazdów, a wartości przypadające na wybrany element z listy pojazdów będą zapisywane w pliku xml o tej samej nazwie co nazwa wybranego elementu. Przy wczytywaniu najpierw wczytam listę elementów następnie w momencie kiedy będę wybierał pojazd z listy będę wczytywał wartości odpowiednie dla nazwy wybranej kategori + .xml. To mam nadzieje że będzie działać o ile czegoś znowu nie przestawiłem.
Ale póki co nie działa mi nawet dodanie elementów do listy...

Czy to jest normalne że będę korzystał z tak dużej liczby plików xml ?

0

Generalnie rzecz biorąc to słabo rozumiem pomysł, to co chcesz osiągnąć. Ale widzę dwa różne obiekty typu Information: info i info1. Nie cały kod jest widoczny, więc może to nie rozwiązanie problemu - ale może upewnij się ,że w momencie wykonywania

items.Add(info1.VehicleName);

obiekt info1 nie jest pusty..? Ogólnie - to jak przekazujesz informacje z Form2 do Form1?

0

Plan jest taki że:

  1. najpierw w Form2 przypisuje wartości pól tekstowych do właściwości z klasy Information poprzez utworzenie obiektu klasy Information
 
Information info = new Information();
info.VehicleName = this.textBoxVehicleName.Text;
info.Fuel = this.textBoxFuel.Text;
info.Engine = this.textBoxEngine.Text;

Czyli na chwilę obecną to co wpisałem w TextBoxach powinno znajdować się we właściwościach klasy Information: VehicleName Fuel Engine.

public string VehicleName { get; set; }
public string Fuel { get; set; }
public string Engine { get; set; } 

Teraz w Form1 tworzę znowu nowy obiekt klasy Information żeby odwołać się do właściwości w klasie Information i dodaję właściwość VehicleName do listy:

List<string> items = new List<string>();
Information info = new Information();
items.Add(info.VehicleName);

Problem jest taki że dodają się puste wartości zamiast tych co wpisałem w TextBox

Co do mojego pomysłu całego programu to nie wiem czy on jest dobry, bo nigdy nic z zapisem do pliku nie robiłem. Generalnie np. dodaje pojazd do listy w TextBox1 w TextBox2 i TextBox3 dodaje też dodatkowe informacje np rodzaj paliwa i silnik. Klikam OK. I wartość TextBox1 dodaje się do listy i zapisuje do pliku xml całą liste. Wartość TextBox2 i TextBox3 zapisuje do pliku xml też a nazwa pliku xml to nazwa pojazdu dodanego właśnie do listy. W ten sposób myślę ze za pomocą 3 zmiennych będę mógł dodawać wiele pojazdów nie tworząc nowych tylko będę wczytywał różne pliki xml. Ale pewnie tak się nie powinno robić tylko że ja nie wiem jak inaczej, nic też w tej sprawie nie mogę znaleźć.

1
RideorDie napisał(a):

Teraz w Form1 **tworzę znowu nowy obiekt **klasy Information żeby odwołać się do właściwości w klasie Information i dodaję właściwość VehicleName do listy:

List<string> items = new List<string>();
Information info = new Information();
items.Add(info.VehicleName);

Problem jest taki że dodają się puste wartości zamiast tych co wpisałem w TextBox

Sam sobie odpowiedziałeś co jest przyczyną - pogrubiłem to ;) Jesli chcesz skorzystac z gotowego obiektu Information, tego samego, który wypełniales wartosciami z textBoxow, to musisz go sobie jakos tutaj poprzekazywac. Ewentualnie wystawic go publicznie w klasie FormX i odebrać w klasie Form1, gdzie z niego korzystasz - brzydkie rozwiazanie, proponowalbym go sobie poprzekazywac w konstruktorze, czy jakos wstrzelic przez property do klasy docelowej

0

Też tak kurde myślałem że to aż głupie.. Dzięki.

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