Formübergreifen arbeiten

gs_iceman

Grünschnabel
Hallo.

ich habe mit einem neuen Projekt angefangen. Es wird aus mehreren Formen bestehen.
es ist wichtig werte von variabeln aus form2 zu form1 zu übertragen.

wie werd ich sowas machen

mit freundlichen grüßen
gs_iceman
 
du hälst in Form1 eine Instanz vom Form2.
Von Form1 aus rufst du nun einfach öffentliche Variablen / Methoden von Form2 auf.

Ev. lohnt es sich auch dafür eine extra Klasse zu erstellen die die benötigten Methoden / Variablen enthält und beide Formulare eine Referenz der Klasse halten.
(in Form1 Klasse instanziieren und einfach an Form2 übergeben, Klassen werden immer by reference übergeben)

Spyke (www.iv-interactive.de)
 
Würde ich eher nicht machen. Besser wäre ein eigenes Objekt, welches an beide Formen gebunden ist und so für den Datenaustausch sorgt.
 
Würde ich eher nicht machen. Besser wäre ein eigenes Objekt, welches an beide Formen gebunden ist und so für den Datenaustausch sorgt.

Hey Norbert,

kannst du das etwas genauer erklären, wie das gehen soll? (ich hätte es bis jetzt auch über eine Klasse gemacht)

Was sind die Vorteile und wie mache ich das!

Gruß
Rudolf Grauberger
 
Hey Norbert,

kannst du das etwas genauer erklären, wie das gehen soll? (ich hätte es bis jetzt auch über eine Klasse gemacht)

Was sind die Vorteile und wie mache ich das!

Gruß
Rudolf Grauberger

Hab ich doch in meinem Post beschrieben :rolleyes:
Du erstellt das Objekt als Klasse (nicht als Struktur).
Instanziierst das Objekt in deinem Hauptformular und übergibst es an dein anderes Formular.
(Wie oben schon erwähnt bei Klassen wird immer nur die Referenz weiter gegeben).
Ev. noch INotifyPropertyChanged Schnittstelle implementieren damit beide Formulare mitbekommen das sich eine Eigenschaft geändert hat (oder von mir aus auch eigene Ereignisse implementieren).

Ungefähr so:
PHP:
class HauptForm:Form
{
        void Zeige NebenForm()
         {
               using(NebenForm nf=new NebenForm(meinObjekt))
                     nf.ShowDialog(this);
         }

        MeinObjekt meinObjekt;
}

class NebenForm:Form
{
      NebenForm(MeinObjekt mo)
      {
             meinObjekt=mo;
      }
      MeinObjekt meinObjekt;
}

class MeinObjekt:INotifyPropertyChanged
{
   private int irgendwas;
   public int Irgendwas
   {
       get{return irgendwas;
       set
       {
             if(irgendwas!=value)
             {
                      irgendwas=value;
                      OnPropertyChanged("Irgendwas");
             }
       }
   }

   private void OnPropertyChanged(string propertyName)
   {
         OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
   }

   protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
   {
               if(PropertyChanged!=null)
                   PropertyChanged(this, e);
   }

   public event PropertyChangedEventHandler PropertyChanged;
}

Spyke (www.iv-interactive.de)
 
Ob man nun die INotifyPropertyChanged Schnittstelle benötigt hängt wohl vom Verwendungszweck dieser, ich nenne sie mal so, Datentransferklasse ab. Öffnet man das Formular nämlich mit ShowDialog() und verarbeitet die Eingaben dort nur im Fall DialogResult.OK, dann kann man einfach die Eigenschaften der Transferklasse verarbeiten ohne gezielt über eine Änderung informiert zu werden.
(z.B. bei einem Einstellungsdialog, o.ä.)

Zeige ich jedoch das Formular nur mit Show() an, macht INotifyPropertyChanged durchaus Sinn... und wenn es nur darum geht irgendwelche Einstellungen im Form direkt im Hauptfenster sichtbar zu machen.
(z.B. Texteditor: Änderung der Schriftart schon bei der Auswahl der Schrift im Hauptfenster anzeigen, bevor der Dialog bestätigt wird.)
 
iwie klappt des nich :(

hab jet in form2 "public irgendwas1 as integer"
und in form1 habe ich nen button wo steht "button1.text = cstr(form2.irgendwas1)".
klicke ich auf den button kommt ne 0 raus. obwohl ich den wert von irgendwas1 vorher
schon erhöht habe
 
Zurück