Przekazywanie danych z TextBoxa

0

Witam. Pisze aplikacje, wygląda ona następująco: jest menu i 3 menuitem do wyboru. W pierwszym wprowadzam dane do trzech textBoxów, w drugim pokazuje wyniki pewnych obliczeń, a po wybraniu trzeciego rysuja sie wykresy . Te obliczenia wykonują się w innym pliku (innej klasie), no i tu mam problem bo nie moge sie dostac do danych z tych textBoxów, próbowalem wielu sposbow i nic ...
Generalnie wyglada to tak :

  1. Otwieram formatkę główna
    2.W menu wybieram pierwsza pozycje np. "Pobierz dane"
    3.Wyskakuje nastepna formatka, wpisuje to textBoxów dane, klikam przycisk i wychodze (ustawione mam na this.Hide(); )
  2. W menu wybieram druga pozycje np "pokarz wyniki obliczeń" no i tu niestety .... nie mam wynikow bo nie moge wydobyć danych z textboxów , prawdopodobnie po zamknieciu formatki z danymi, dane sie "ulatniaja"...
    Jesli przy wywołaniu zdarzenia umieszcze np
public void miDaneClick(object sendler, EventArgs ae)
        {
            
            PobierzDane form = new PobierzDane();          
            form.ShowDialog();
            if (form.DialogResult == DialogResult.OK)
            {
                A1 = form.opoz.Text;
            }
      }

To mam w A1 dana z textboxa, ale nie umie jej przekazac innej klasie, w innym pliku w ktorym sa prowadzone obliczenia ... chyba ze problem jest gdzies indziej ...
Prosze o pomoc, jestem poczatkujacy i moze blad lezy zaupelnie gdzies indziej ...

0
  1. formatke PobierzDane powienienes zamykac this.Close() jesli ci nie potrzebna, a nie ukrywac
  2. dobrze odczytujesz wartosc textboxa z formy, podobnie zrob z innymi
  3. zmienne w ktorych zachowujesz dane z texboxow powinny byc polami w klasie formy glownej, a nie zmiennymi lokalnymi w obskudze zdarzenia miDaneClick
  4. zapamietane dane z textboxow do kolejnej formy mozesz przekazac w jej konstruktorze lub przez publiczne wlasciwosci po stworzeniu instancji formy
class Form1 : Form
{
private string _var1;
private MyResults _results;

  void miDaneClick(s,e)
  {
    PobierzDane form = new PobierzDane();
    if (form.ShowDialog() == DialogResults.OK)
    {
      _var1 = form.textbox1.Text;
    }
  }
  void miMenuOption2Click(s,e)
  {
    Form2 f2 = new Form2(_var1, ...);
    // lub
    Form f2 = new Form2();
    f2.Value1 = _var1;

    if (f2.ShowDialog() == DialogResults.OK)
    {
      _results = f2.Results;
    }
  }
}

pomoglo?

0

Dzieki za odpowiedz ale chyba albo mi sie plącze wszystko albo faktycznie nie rozumiem tego ...
W zasadzie nie chce przekazac wartosci do innej formy tylko innej klasy ( nie bedacej formą)

To wyglada tak :

Glowna forma:

public partial class Wybory : Form
    {
        public string A1, B1, k1;
             
        public void miDaneClick(object sendler, EventArgs ae)
        {       
            PobierzDane form = new PobierzDane();                     
            form.ShowDialog();
            form.Dispose();
            if (form.DialogResult == DialogResult.OK)
            {             
                A1 = form.A.Text;
                B1 = form.B.Text;
                k1 = form.opoz.Text;              
            }    
        }  
        public void miPokarzClick(object sendler, EventArgs ea) // tu pokazuje wyniki obliczen
        {  
            PokarzWyniki pw = new PokarzWyniki();
            pw.ShowDialog();
        }
        public Wybory()
        {

            // ...... instrukcje ...... 

            miDane.Click += new EventHandler(miDaneClick);
            miPokarz.Click += new EventHandler(miPokarzClick);
        }

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

Forma z wprowadzeniem danych :

public partial class PobierzDane : Form
    {
       
        public void WczytajClick(object sender, EventArgs ea)
        {

            this.DialogResult = DialogResult.OK;
            this.Close();     
        }       
        public PobierzDane()
    {
// ...ustawienia ..... 
        }
        private void PobierzDane_Load(object sender, EventArgs e)
        {  
        }
    }
}

Klasa z obliczeniami:

class RMNK 
    {
           
        public RMNK()
        {
// tu sa obliczenia ... do ktorych potrzebuje dane z Textboxow ... wyniki obliczen sa przekazywane innej formie, gdzie są wyswietlane - to dziala bez zarzutów 
            }
        }

Do calosci jest jeszcze jeden plik Program ktory wywołuje w Main() Application.Run(new Wybory());
Calosc jest mocno rozbudowana, a w skrocie mniej wiecej wyglada to tak jak napisalem... z desperacji dane z TextBoxow zapisuje do pliku i odczytuje w RMNK ale dalej zastanawiam sie jak to zrobic, by po zamknieciu formy PobierzDane dane z textboxow sie nie ulatnialy, no i jak przekazac z klasy Wybory stringi A1,B1 i kk do klasy RMNK ... ?! Jesli w RMNK napisze np:
Wybory wyb = new Wybory();
value = wyb.A1; // value zadeklarowane na poczatku
to nie mam żadnej wartości w value ... help!

0

o jej, trzeba zaczac od podstaw

Klasy enkapsuluja pewne cechy i zachowania. Aby instancja jakiejs klasy - obiekt, dowiedzial sie o jakis wartosciach musisz mu o tym powiedziec. Jak? Albo przekazac jako paramtery konstruktora, albo przypisac wartosci do odpowiednich pol/wlasciwosci (raczej wlasciwosci - bo masz kontrole nad momentem kiedy wartosc jest zwracana i ustawiana).

class MyClass
{
  // konstruktor bezparametrowy
  public MyClass()
  {}
  // konstruktor z 3 parametrami
  public MyClass(string p1, int p2, decimal p3)
  {
    this.P1 = p1;
    this.P2 = p2;
    this.P3 = p3;
  }
  // wlasciwosc publiczna
  public string P1 {get;set;}
  // wlasciwosc publiczna
  public int P2 {get;set;}
  // pole publiczne
  public decimal P3;
  
  // publiczna metoda z jednym parametrem
  public decimal CosRob(int x)
  {
    decimal result = 0M;
    result += x;
    result *= this.P2 + this.P3;
    return result;
  }
}

jezeli na formie masz przycisk i ustawisz jego wlasciwosc DialogResult na odpowiedznia wartosc enuma DialogResult, to po jego kliknieciu forma zostanie zamknieta i zwrocona ustawiona w wlasciwosci wartosc, wiec nie potrzeba ci obslugi klikania tego przycisku, czyli public void WczytajClick(object sender, EventArgs ea)
poza tym procedura odslugi zdarzenia powinna byc prywatna, nie ma tu przeskanek, dla ktorych powinienes ja upublicznic

Dane z formy powinny byc zwracane przez publiczne wlasciwosci, a nie upublicznianie kontrolek.
czyli:

class Form1 : Form
{
  public string Wartosc1 { get {return textbox1.Text; } }
  public bool Wartosc2 { get { return checkbox1.Checked; } }
  ...
}

Wydaje mi sie ze twoj program powinien wygladac tak:
Wybor z menu/przycisk na formie [wprowadz dane]
W obsludze zdarzenia pokazujesz dialog do wprowadzenia wszystkich danych, przycisk OK zamyka forme.
Sprzwdzasz czy kliknieto OK, jesli tak pobierasz dane z formy.
Kolejna opcja menu [Wykonaj oblicznia] moze otwierac kolejna forme, jesli w niej maja byc pokazane wyniki. Do tej formy przekazyjesz pobrane wartosci zapamietane z pierwsze formy do wprowadzania danych.
W formie do obliczen tworzysz klase RMNK i ustawiasz jej wlasciwosci, a nastepnie wywolujesz jakas jej metode liczaca. Po skonczeniu obliczen pokazujesz wyniki. Po zamknieciu formy wczesniej zapamietany wynik obliczne powinienes glownemu oknu udostepnic przez publiczna wlasciwosc, wystarczy get.
Kolejna opcja z menu uruchamia forme przezetujaca wyniki w postaci graficznej. Przekaz do niej wyniki obliczne w konstruktorze lub tez przez publiczne wlasciwosci.

0

Dzieki za wszystkie wskazówki i za zainteresowanie ...
W takim razie ruszam od nowa, a raczej łapię się za poprawianie kodu ;)
Pozdrawiam

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