pisanie aplikacji - problem z kolekcja dictionary

0

W miarę możliwości nie chce gotowych kodów, chce rad i sugestii oraz wytykania błędnego myślenia.
Jeśli nie chce Ci się wszystkiego czytać przejdź do podpunktu problem

**Opis docelowej aplikacji **
Zadaniem aplikacji jest pobieranie danych od użytkownika, będzie on przekazywał wejściowe informacje za pomocą panelu. Dane jakie podał będą pokazane w formie tabeli. Dane -> diagram EPC -> tekst opisujacy diagram (proces) -> reguły

W najbliższym czasie chce się skupić na przechowywaniu danych i tworzenie diagramu epc.

  • stan aktualny**

tak wygląda panel sterowania, użytkownik ma do wyboru funkcje/zdarzenie/xor/or/and podczas dodawania elementu może dodać do niego opis/nazwę (w później wersji nr id poprzednika ), podczas wyboru przycisku dodaj, do kolekcji dodawany ma być obiekt danej klasy o parametrach zdefiniowanych w textboxach.

Image and video hosting by TinyPic

klasy na razie maja tylko dane jakie będą przechowywać, zależy jak mi zejdzie z dodawaniem tego do tabeli tak zacznę pracować nad forma, żeby można było je sparsować, by istniała możliwość wyświetlania diagramu

PROBLEM

CEL-kolekcja ma przechowywać obiekty różnych klas podrzędnych do klasy baza, ma być magazynem stworzonych obiektów przez użytkownika

  • mała legenda* obiekty zdarzeń to obiekty powstałe z klas funkcjazdarzenia/xor/or/and, kolekcja dictionary ma je magazynować

#Od tego zacznę, nie wiem czy powinienem deklarować klasę dictionary jak to się robi w normalnej klasie, czytałem że ma ona wbudowane metody, więc chyba ten twór na samym dole jest zbędny. Tak samo jak tworzenie metody dodaj.

#Jeśli jednak, trzeba stworzyć klasę to nie wiem czy w środku klasy ma być zadeklarowana lista danych do których te obiekty zdarzeń będą dodawane, jak np string rodzaj w klasach zdarzeń, czy może ona jest już wbudowana i nie trzeba deklarować.

#Stworzyłem obiekt tej klasy, który będzie powstawał do życia, przy pierwszym naciśnięciu buttona7.

Konsekwencja niejasności i chyba błędów jest fakt że wyskakują mi błędy przy dodawaniu linijki, która byłaby odpowiedzialna za dodanie nowego rekordu do kolekcjio dictionary naszalista:
naszalista.add(new baza(2, "xor"); <- wyskakuje does not exist, czyli jakby nie była zadeklarowana, a konstruktor jest zrobiony

jakiej klasy identyfikator powinna mieć klasa dictionary, żeby można dodawać obiekty z każdej klasy, która dziedziczy z baza,wydawało mi się, że jeśli wszystkie są jakoś połączone z baza to właśnie to będzie dobry identyfikatorem

kod stojący za tym panelem

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 _1dwa3
{
    public partial class Form1 : Form
    {
        public Form1()
        {

           
           
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj funkcję";
            textBox3.Text = "Funkcja";
            textBox2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj zdarzenie";
            textBox3.Text = "Zdarzenie";
            textBox2.Enabled = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj ścieżkę procesu";
            textBox3.Text = "Ścieżka procesu";
            textBox2.Enabled = true;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj OR";
            textBox3.Text = "OR";
            textBox2.Enabled = false;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj AND";
            textBox3.Text = "AND";
            textBox2.Enabled = false;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            button7.Visible = true;
            button7.Text = "Dodaj XOR";
            textBox3.Text = "XOR";
            textBox2.Enabled = false;
        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void button7_Click(object sender, EventArgs e)
        {
            int i = 0;
            if (i == 0) // obudowalem prymitywna petla bo chce zeby byla jedna lista a nie dziesiec dlatego wykona sie tylko przy pierwszym kliknieciu 
            {
                Dictionary<int, baza> naszalista = new Dictionary<int, baza>();
                      i++;
            } //tworzenie obiektu klasy 
            string aktufunktor = button7.Text;  //przypisuje nazwe guzika do parametru dzięki czemy będziemy wiedzieli jaki obiekt ma powstac funkcj/xor/or/and
            
        }
    }


    enum enotacja  //narazie nie potrzebne 
    {
        efunkcja = 1,
        ezdarzenie = 2,
        esciezkaprocesu = 3,
        eor = 4,
        eand = 5,
        exor = 6,
    }
    public class baza    // deklaracja klasy bazowje dla roznych elementow notacji 
    {
        protected string rodzaj;
      
        
    }

    public class funckjazdarzenie :baza // narazie funkcja a zdarzenie nie roznia sie elementami jakie zawieraja( klasa sie zmieni jak bedziemy przedstawiac je graficznie           
    {
        string opis;
        string nazwa;
        public funckjazdarzenie(string krodzaj,  string knazwa, string kopis)
        {
            rodzaj = krodzaj;
            nazwa = knazwa;
            opis = kopis;
        }

    }

    public class xor : baza //klasa odpowiedzialna za xora 
    {
        public xor(string krodzaj)
        {
            rodzaj = krodzaj;
           
        }

    }

    public class or : baza //klasa odpowiedzialna za ora 
    {
        public or(string krodzaj, int knrid)
        {
            rodzaj = krodzaj;
            
        }

    }

    public class and : baza // klasa odpowiedzialna za and 
    {
        public and(string krodzaj, int knrid)
        {
            rodzaj = krodzaj;
            
        }
    }

   public class Dictionary<int,baza> 
   {                               // klasa która jest odpowiedzialna za liste musze podpiac pod nia jakis guzik ktory bedzie tworzyl obiekt i przsyzywal do zycia tabele 
      //  public Dictionary<int,baza> listadzialan = new Dictionary<int,baza>();

        public void dodaj(string guzik7)     // narazie add zwykly pozniej sie go polaczy z obiektami ( prototyp dokoduje w odpowiednim czasie) 
        
        {
          

        }
    }
    
} 

Każda uwaga będzie cenna sry za brak ą, ale a mi w lapku wysiadło.

Sry za ścianę tekstu, ale starałem się opisać od całego celu aplikacji do aktualnego problemu.

Pozdrawiam

0

Rozwiązałem chyba problem, klasa na dole to bujda do wywalenia, bo już jest zadeklarowana w domyśle, po public partial class form:form1 zadeklarowałem:

 Dictionary<int,baza> naszalista= new Dictionary<int,baza>();

i teraz po buttonie7

 naszalista.Add(1, new xor("rodza",2));

nie wywala błędów, czyli dla potomnych też to działa class, chyba to jest poprawne, zaraz sprawdzę czy chodzi dla innych,

CELE
to teraz trzeba napisać część, która będzie sczytywała z textbox'ów parametry i tworzyła obiekty danej klasy w zależności od wybrenej konfiguracji w panelu, ale to plan na ranek przed wyjściem z domu, jak oczywiście coś jeszcze nie wyskoczy,

2
private void button7_Click(object sender, EventArgs e)
        {
            int i = 0;
            if (i == 0) // obudowalem prymitywna petla bo chce zeby byla jedna lista a nie dziesiec dlatego wykona sie tylko przy pierwszym kliknieciu 
            {
                Dictionary<int, baza> naszalista = new Dictionary<int, baza>();
                      i++;
            } //tworzenie obiektu klasy 
            string aktufunktor = button7.Text;  //przypisuje nazwe guzika do parametru dzięki czemy będziemy wiedzieli jaki obiekt ma powstac funkcj/xor/or/and
 
        } 

po co tutaj instrukcja warunkowa if skoro tak czy siak wykona Ci się owe zdarzenie bo zaraz po wciśnięciu buttona do i przypisujesz 0, nie jest one zależne od wyników innych funkcji.

0

no teraz trochę inaczej wygląda, bo wrzuciłem tworzenie kolekcji w inne miejsce w kodzie. W tym momencie chodziło mi,żeby raz się tworzyła kolekcja nie dziesięć razy, bo ten guzik będzie kilkukrotnie naciskany, i jak pierwszy raz się naciśnie to wykona się kod i i zwiększy się o jeden, więc już drugi raz się nie wykona

0

aktualnie: obiekty dodaja się do kolekcji, a przynajmniej mam taka nadzieję, tekst przenoszony jest także do tabeli w panelu żeby był podglad, jakie elementy zostały dodane

aktualny kod:

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 _1dwa3
{
    public partial class Form1 : Form
    {



        Dictionary<int, baza> naszalista = new Dictionary<int, baza>(); // deklaracja kolekcji, w której przechowywane będa obiekty klas(funkcje/zdarzenia/xor/or/and)
        int i = 0; // numer wiersza od którego zaczynamy zapisywanie rekordów do tabeli w panelu głównym 
        public Form1()
        {
            
            InitializeComponent();
           
        }
         

        private void Form1_Load(object sender, EventArgs e)            //do wywalenia
        {
           
        }

        private void label1_Click(object sender, EventArgs e)            //do wywalenia
        {

        }

        private void button1_Click(object sender, EventArgs e)      //przycisk funkcja 
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj funkcję";         //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "Funkcja";              //w polu "rodzaj" automatem leci nazwa "funkcja"
            textBox2.Enabled = true;                //umożliwia dodawanie nazwy dla tego elementu
        }

        private void button2_Click(object sender, EventArgs e)      //przycisk zdarzenie
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj zdarzenie";       //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "Zdarzenie";            //w polu "rodzaj" automatem leci nazwa "zdarzenie"
            textBox2.Enabled = true;
        }

        private void button3_Click(object sender, EventArgs e)       //przycisk ścieżka procesu
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj ścieżkę procesu"; //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "Ścieżka procesu";      //w polu "rodzaj" automatem leci nazwa "Ścieżka procesu"    
            textBox2.Enabled = true;                //umożliwia dodawanie nazwy dla tego elementu
        }

        private void button4_Click(object sender, EventArgs e)      //przycisk OR
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj OR";              //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "OR";                   //w polu "rodzaj" automatem leci nazwa "OR"
            textBox2.Enabled = false;               //uniemożliwia dodawanie nazwy dla tego elementu              
        }

        private void button5_Click(object sender, EventArgs e)      //przycisk AND
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj AND";             //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "AND";                  //w polu "rodzaj" automatem leci nazwa "AND"
            textBox2.Enabled = false;               //uniemożliwia dodawanie nazwy dla tego elementu                 
        }

        private void button6_Click(object sender, EventArgs e)      //przycisk XOR
        {
            button7.Visible = true;                 //przycisk do dodawania do tabeli widoczny
            button7.Text = "Dodaj XOR";             //zmiana wyświetlanego tekstu w przycisku do dodawania do tabeli
            textBox3.Text = "XOR";                  //w polu "rodzaj" automatem leci nazwa "XOR"    
            textBox2.Enabled = false;               //uniemożliwia dodawanie nazwy dla tego elementu    
        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)            //do wywalenia
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

       

        private void button7_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add(1);                                 // kod odpowiedzialny za dodawanie do tabeli w panelu głównym tekstu wpisanego do textboxów 
            dataGridView1.Rows[i].Cells[0].Value = textBox1.Text;
            dataGridView1.Rows[i].Cells[1].Value = textBox2.Text;
            dataGridView1.Rows[i].Cells[2].Value = textBox3.Text;
            dataGridView1.Rows[i].Cells[3].Value = textBox4.Text;
            dataGridView1.Rows[i].Cells[4].Value = textBox5.Text;
            i++; // komenda odpowiedzialna za przejście do następnego wiersza, żeby kolejny rekord zapisywał się w kolejnym wierszu, a nie jeden na drugim 

            string jakirodzaj = textBox3.Text;  // w tej zmiennej zawarty jest typ elementu który wybrał użytkownik


            if (jakirodzaj == "Funkcja") // ify odpowiedzialne za wywołanie odpowiedniego konstruktora w zależności od wybranego rodzaju w tabeli 
            {
                naszalista.Add(i, new funkcjazdarzenie(textBox3.Text, textBox2.Text, textBox6.Text));

            }
            else if (jakirodzaj == "Zdarzenie")
            {
                naszalista.Add(i, new funkcjazdarzenie(textBox3.Text, textBox2.Text, textBox6.Text));

            }
            else if (jakirodzaj == "OR")
            {
                naszalista.Add(i, new or(textBox3.Text));

            }
            else if (jakirodzaj == "XOR")
            {
                naszalista.Add(i, new xor(textBox3.Text));

            }
            else if (jakirodzaj == "AND")
            {
                naszalista.Add(i, new and(textBox3.Text));

            }

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";

        }
    }


    enum enotacja  //narazie nie potrzebne 
    {
        efunkcja = 1,
        ezdarzenie = 2,
        esciezkaprocesu = 3,
        eor = 4,
        eand = 5,
        exor = 6,
    }
    public class baza    // deklaracja klasy bazowje dla roznych elementow notacji 
    {
        protected string rodzaj;


    }

    public class funkcjazdarzenie : baza // narazie funkcja a zdarzenie nie roznia sie elementami jakie zawieraja( klasa sie zmieni jak bedziemy przedstawiac je graficznie           
    {
        string opis;
        string nazwa;
        public funkcjazdarzenie(string krodzaj, string knazwa, string kopis)
        {
            rodzaj = krodzaj;

            nazwa = knazwa;
            opis = kopis;
        }

    }

    public class xor : baza //klasa odpowiedzialna za xora 
    {
        public xor(string krodzaj)
        {
            rodzaj = krodzaj;

        }

    }

    public class or : baza //klasa odpowiedzialna za ora 
    {
        public or(string krodzaj)
        {
            rodzaj = krodzaj;

        }

    }

    public class and : baza // klasa odpowiedzialna za and 
    {
        public and(string krodzaj)
        {
            rodzaj = krodzaj;

        }
    }


}
 

Cel to generowanie diagramów, więc teraz ma miejsce ogarnianie materiałów i przejście do ofensywy, hasła przewodnie to wpf, xaml, parsowanie danych, jak zwykle wskazówki mile widziane ;)

Pozdro,

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