Entwickler-Ecke

Basistechnologien - Form Datenübergabe


coolace - So 29.08.10 18:12
Titel: Form Datenübergabe
Hy,

ich habe alles möglich probiert aber ich komme hier zu keinem Ergebnis. Im Grunde ist es ja
ein Standardvorgeben Daten von Form2 auf die Hauptform zu übergeben aber hier bekomme ich es nicht hin


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Hauptform:
String suchen;

public void Suchroutine(String search)
{
    suchen = search;         
}


Form2:
private void rtfsuchen_KeyPress(object sender, KeyPressEventArgs e)
{            
  if (e.KeyChar.Equals((char)13))
 {             
   ((Form1)Owner).Suchroutine("Testtext");
 }
}

Fehler: NullReferenceException

Wie kann das sein, ich greife ja auf eine public Funktion in der Hauptform zu und muss
ja nichts mit "new" erzeugen. Was mache ich hier falsch ?

Gruß

Coolace


Trashkid2000 - So 29.08.10 18:21

Hi,

Du könntest Deiner Form2 im Konstruktor einen Verweis auf Deine Form1 mitgeben.
Und dann die Funktion aufrufen...

LG, Marko


coolace - So 29.08.10 18:24

Wie mach ich das ?
sorry, hab ich noch nie gemacht ?


Trashkid2000 - So 29.08.10 18:30

So:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private Form1 mainForm;

public Form2(Form1 mainForm)
{
  InitializeComponent(); 
  this.mainForm = mainForm;  
}


Dann musst Du nur noch beim Aufruf der Form2 den Verweis auf Form mitgeben (this), und kannst dann über

C#-Quelltext
1:
this.mainForm..Suchroutine("Testtext");                    

Deine Funktion aufrufen. Wenn sie denn nicht private ist :)

LG, Marko


Trashkid2000 - So 29.08.10 18:31

Noch was vergessen:

Oder Du löst das ganze mit Events.


Kha - So 29.08.10 18:49

Etwas ins Blaue geraten, aber für mich sieht das eher so aus, als sollte diese "Suchroutine" gar nicht in Form1, sondern in einer separate Klasse sein, die dann von beiden Forms benutzt werden kann.


coolace - So 29.08.10 19:32

Ne, das sind 2 verschiedene WinForms die im MS Visual Studio 2010 erzeugt worden sind.

In der Form1 rufe ich die Form2 und in der Form2 gibt es eine Textbox und die Eingabe soll
wieder in die Form1 übergeben und dort dann in der Funktion verwendet werden.

Das vorgehen in meinem Code Fragment habe ich bis .NET 3.5 dauernd verwendet aber seit
dem .Net 4.0, das ich seit ein paar Wochen verwendet klappt es nicht mehr. Warum auch immer


coolace - Mo 06.09.10 21:07

Danke für die zahlreichen Antworten, habe es mit Trashkid2000 seiner Antwort gelöst.
Vor .NET 4.0 ging das noch auf meine Weise, keine Ahnung was die geändert haben.

Gruß


Coolace