przekazywanie danych miedzy formami - błąd

Odpowiedz Nowy wątek
2008-03-22 20:32
Merowing
0

Wiem, że tan tamat był już poruszany.
Mam taki kod:

public Form1 form1= new Form1();
form1.form1szerokosc.Enabled = true;
form1.form1wysokosc.Enabled = true;
form1.form1jakosc.Enabled = true;
form1.toolStripButton1.Enabled = true;

Ten kod wywoływany jest na formie 2.
I nic sie nie dzieje na formie 1.
Ale jak dodam:
form1.Show();
to się wyświetla ale są dwie formy nr1.
Co zrobić żeby na formie 1 pokazały się wyniki kodu bez jej ponownego uruchamiania?

Pozostało 580 znaków

2008-03-22 21:56
0
Merowing napisał(a)

Wiem, że tan tamat był już poruszany.

To pisz w temacie gdzie ten problem byl poruszany. Po co znowu zakladac temat o tym samym?

I co do samego tematu to dawalem link do swietnego arta na CodeProject, gdzie jest wszystko pieknie wytlumaczone. Poszukaj.


Pozostało 580 znaków

2008-03-23 21:23
Merowing
0

Wiem, że dawałeś link ale tam jest wytłumaczone jak wysłać dane do tworzonej formy a nie już istniejącej.

Pozostało 580 znaków

2008-03-23 21:45
0

Daj kod i napisz dokladnie co chcesz uzyskac.


Pozostało 580 znaków

2008-03-24 13:53
Merowing
0

Kod form nr2:

private void button1_Click(object sender, EventArgs e)
        {
            int i=0;           
            String[] wlasnosci = new string[4];
            string load = listBox1.SelectedItem.ToString();
            StreamReader stream = new StreamReader(Application.StartupPath + "\\profile\\" + load);
            while (!stream.EndOfStream)
            {
                wlasnosci[i]=stream.ReadLine();
                i++;
            }

            form1.form1szerokosc.Enabled = true;
            form1.form1wysokosc.Enabled = true;
            form1.form1jakosc.Enabled = true;
            form1.toolStripButton1.Enabled = true;
            form1.form1szerokosc.Text = wlasnosci[0];
            form1.form1wysokosc.Text = wlasnosci[1];
            form1.form1jakosc.Text = wlasnosci[2];

            Close();
        }

Forma wczytuje liste plików do listboxa i po wcisnięciu przycisku pobiera dane z pliku i przekazuje do formy nr.1

Pozostało 580 znaków

2008-03-24 14:21
0

W kodzie Form2 musisz miec publiczna zmienna form1 typu Form. Posluzy ona do zmiany wartosci zmiennych w Form1.

public partial class Form2 : Form
    {
        public Form form1; 

        ...
     }

Kiedy tworzysz nowe okienko Form2 z poziomu Form1 poprzez klikniecie buttona musisz przypisac aktualna forme do publicznej zmiennej form1 w Form2:


//zdarzenie wywolywane w Form1
private void Button1_Click(object sender, EventArgs e)
        {
            Form2 drugiFormularz = new Form2();
            drugiFormularz.form1 = this; //przekazanie aktualnego formularza do Form2
            drugiFormularz.Show(); //wyswietlenie niemodalnego okna
        }

Teraz masz dostep do Form1 z poziomu Form2:


//zdarzenie wywolywane w Form2
private void Button1_Click(object sender, EventArgs e)
        {
           form1.Text = "bla bla bla"; //zmiana nazwy Form1
        }

Odsylam poraz kolejny do artykulu, do ktorego dawalem juz linka.


Pozostało 580 znaków

2008-03-24 16:03
0

Dobrym nawykiem moim zdaniem przekazywania referencji do innego Form-a jest robienie to za pomocą konstruktora:

public partial class Form2 : Form
    {
        Form form;

        public Form2(Form form)
        {
            InitializeComponent();
            this.form = form;
        }
    }

Gdy tworzymy obiekt Klasy Form2 w Form1:

Form2 form = new Form2(this);

Odrazu widzimy, że należy przekazać referencję w argumencje konstruktora, a w sposobie wyżej zauważamy dopiero podczas działania programu, że nalezało przekazać referencje polu typu Form ;)

Pozostało 580 znaków

2008-03-24 17:41
Merowing
0

Kurtth twój sposób jest dobry nawet by mi pasował, ale...
W formie2 odwołuję się do komponentów form1 a gdy robię twoim sposobem to mam coś takiego:
System.Windows.Forms.Form' does not contain a definition for 'szerokosc'

Pozostało 580 znaków

2008-03-24 17:48
0

Bo odwolujesz sie do czegos, co zwyczajnie nie istnieje. Umiemy angielski?


Pozostało 580 znaków

2008-03-24 20:24
Merowing
0

Właśnie o tym napisałem, że wszystko było by pięknie ale...
Odwołanie się do czegoś co nie istnieje nie jest możliwe.

Pozostało 580 znaków

2008-03-24 22:18
0

Kontrolkę, którą chcesz modyfikować ustaw jako publiczną. W Properties ustaw Modifiers na public.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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