• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# przekazywanie zmiennych pomiędzy klasami

0 głosów
2,424 wizyt
pytanie zadane 30 kwietnia 2017 w C# przez liledusty Obywatel (1,430 p.)

Witam posiadam pewien problem. Dotyczy on przekazywania zmiennych pomiedzy klasami w obie strony.

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;
using System.IO;
namespace Odpalanie_programow_konsolka
{
    public partial class dodajprogram : Form
    {


        program program = new program(); TU WYWYWALA BŁĄD
        string wyslijkomenda;
        string wyslijsciezka;

        public dodajprogram()
        { 
            InitializeComponent();
       
    }
        private dodajprogram dodaj = new dodajprogram();
  
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
           
            if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = openFileDialog1.FileName;

            }
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
           
           wyslijkomenda = textBox1.Text;
           wyslijsciezka = textBox2.Text;
            
            program.dodajprogram(wyslijkomenda, wyslijsciezka);
            Dictionary<int, program> oPersonsDictionary = new Dictionary<int, program>();
           oPersonsDictionary.Add(program.id, new program(program.id, program.komenda, program.sciezka));
            






        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();   
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
        }

        private void dodajprogram_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            
        }
    }
    public partial class program
    {
        public int id = 1;
        public string komenda;
        public string @sciezka;

        public program(int i, string k, string s)
        {
            id = i;
            komenda = k;
            sciezka = s;
           
        }

       public void dodajprogram(string wyslijkomenda, string wyslijsciezka)
        {
            id += 1;
            komenda = wyslijkomenda;
            @sciezka = wyslijsciezka;
            MessageBox.Show(komenda + " " + sciezka+" "+id);
            dodajprogram dodajprogram = new dodajprogram();



        }



    }




}

Otóż z przesyłaniem zmiennych do klasy program nie ma problemu, ale gdy chce przesłać zmienne do klasy dodajprogram to nie dość że muszę używać "program.ZMIENNA" to jeszcze mi wywala błąd przy tworzeniu instancji tej klasy. Ogólnie jakoś tego całego przesyłania nie do końca rozumiem, jakby ktoś mógłby mi wytłumaczyć byłbym bardzo wdzięczny. 

2 odpowiedzi

0 głosów
odpowiedź 30 kwietnia 2017 przez CzikaCarry Szeryf (75,340 p.)
wybrane 30 kwietnia 2017 przez liledusty
 
Najlepsza
Klasa program to klasa statyczna, więc nie możesz stworzyć jej instancji. W tym przypadku możesz odwołać się tylko do pól publicznych. Poczytaj co to są settery i gettery.
komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
edycja 30 kwietnia 2017 przez liledusty

Przerobiłem kod na gettery i settery

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;
using System.IO;
namespace Odpalanie_programow_konsolka
{
    public partial class dodajprogram : Form
    {


        program programob = new program();
        public string wyslijkomenda { get; set; }
        public string wyslijsciezka { get; set; }

        public dodajprogram()
        { 
            InitializeComponent();
       
    }
        private dodajprogram dodaj = new dodajprogram();
  
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
           
            if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = openFileDialog1.FileName;

            }
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
           
           wyslijkomenda = textBox1.Text;
           wyslijsciezka = textBox2.Text;

            programob.addprogram();
            Dictionary<int, program> oPersonsDictionary = new Dictionary<int, program>();
            
           oPersonsDictionary.Add(programob.id, new program(programob.id, programob.komenda, programob.sciezka));
            






        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();   
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
        }

        private void dodajprogram_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            
        }
    }
    public class program
    {
        
        public int id { get; set;}
        public string komenda { get; set; }
        public string @sciezka { get; set; }

        public program ()
        {
            
           
        }

       public void addprogram()
        {
            id += 1;
            dodajprogram dodajprogramob = new dodajprogram();
            komenda = dodajprogramob.wyslijkomenda;
            @sciezka = dodajprogramob.wyslijsciezka;
            MessageBox.Show(komenda + " " + sciezka+" "+id);
          


        }



    }




}

Ale pokazuje mi przy opersonsDictionary błąd w którym pisze że muszę podać 3 argumenty w konstruktorze a gdy je podam pojawia się ten sam błąd co wyżej. Może coś nie tak z tą konstrukscją opersonsDictionary zrobiłem?

komentarz 30 kwietnia 2017 przez Dorion300 Szeryf (90,250 p.)
edycja 30 kwietnia 2017 przez Dorion300

@CzikaCarry klasa "program" nie jest klasą statyczną.

Po prostu parametry konstruktora są puste. (Nie ma konstruktora nie przyjmującego żadnego parametru)

komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
edycja 30 kwietnia 2017 przez liledusty

Gdy dam parametry do konstruktora to pojawia się ten sam błąd co wcześniej, czyli przy tworzeniu instancji klasy w klasie dodajprogram:

program programob = new program(); Co mam tutaj podać? Mam te parametry które wysyłą konstruktor klasy program odebrać? Jak tak to w jaki sposób? Próbowałem na wszystkie możliwe sposoby

      
Klasa dodajprogram:

program programob = new program(); tutaj wywala błąd<<<<


Klasa program:
Konstruktor klasy program
  public program (int id, string komenda, string sciezka)
        {
            this.id = id;
            this.komenda = komenda;
            this.sciezka = sciezka;
           
        }

 

komentarz 30 kwietnia 2017 przez Dorion300 Szeryf (90,250 p.)
program programob = new program(421512, "cokolwiek", "blablabla");  //MUSZĄ BYĆ PARAMETRY DODANE!

//Albo w klasie "program"

public program ()
{          
}
komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
No tak, zapomniałem o domyślnych wartościach. Wszystko teraz działa jak powinno. Dzięki za pomoc.
0 głosów
odpowiedź 30 kwietnia 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Nie możesz nazwać zmiennej tą samą nazwą co klasę.

Podobne pytania

0 głosów
1 odpowiedź 167 wizyt
pytanie zadane 8 stycznia 2017 w C# przez jankustosz1 Nałogowiec (36,960 p.)
0 głosów
1 odpowiedź 448 wizyt
pytanie zadane 2 września 2019 w C# przez XavRock Obywatel (1,390 p.)
0 głosów
0 odpowiedzi 532 wizyt

93,426 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...