[.NET] Parameter/Daten Form übergreifend übergeben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Farin, 27. Juli 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. Juli 2009
    Parameter/Daten Form übergreifend übergeben

    Hallo,

    ich bearbeite gerade ein Teilprogramm eins großen Programms für die Verwaltung von Daten.

    Ich habe leider nur ein Problem. Ich habe 2 Formen. Eingabeform und eine Hilfsform. In der Eingabeform sollen ID's in eine Textbox eingegeben werden (die benötigt werden um ein CrystalReport zu erstellen) und in der Hilfsform sollen sämtliche ids auftauchen mit einer entsprechenden Beschreibung. (sonst weiss man ja nicht was was ist). Diese werden in einer DataGridView eingelesen und sollen nun mit doppelklick in die Eingabeform übernommen werden. Die beiden Formen werden als Objekt erstellt. Sprich ich rufe sie so auf bzw. erstelle sie so:

    Dim eingabe_obj as new Eingabeform
    eingabe_obj.Show()

    und dann in der Eingabeform wenn F8 gedrückt wird halt die Hilfsform:
    Dim hilf_obj as new Hilfeform
    hilf_obj.Show().

    jemand eine idee wie ich nun die daten aus hilfe bekomme ?.

    Könnt auch gerne code in c / c# / vb schreiben. (vorausgesetzt es ist halt .net [kann die sprachen alle )

    LG Farin
     
  2. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Hab ichs nun falsch verstanden, oder willst du einfach die daten der form haben?

    Code:
    x = Form1.Text1.Text
    
    Der code dort is nu zwar vb6 - aber ich denke das hat sich bei .net bestimmt nicht gravierend geändert...

    Oder eben variablen als public deklarieren.
     
  3. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    ne hast du ein wenig falsch verstanden... Ich möchte aus der 2ten Form daten (bzw. nummern) in die 1te Form übertragen (um genau zu sein in eine Txtbox in der ersten Form) und das jedes mal wenn ich doppelt auf die Datagridview in der 2ten Form klicke .

    Ich hoffe das ist nun etwas verständlicher xD

    LG Farin
     
  4. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Ist doch genau das was test@private.co geschrieben hat. Musste halt nur in den Handler vom DatagridView schreiben
    Code:
    From1.TxtBox1.Text = "meine Werte"
     
  5. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Ja stimmt nun sehe ich den Wald wieder oh man wie kann ich auf sowas trivales nicht kommen -.-

    thx a lot

    LG Farin
     
  6. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Puh, und ich dachte scho ich bin nu total verblödet :>

    Demnach kann der thread hier jetzt geschlossen werden.
     
  7. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Stooop^^.

    Nächstes Problem -.-...

    Ich habe das nun versucht, aber da beide Forms als Instanz aufgerufen werden, habe ich nur zugriff auf Shared Functions,Subs etc. Bedeutet ich kann nicht direkt auf meine txtbox zu greifen :/ oder auf irgendeine Variabel (halt nur auf shared sachen). Aber wie kann ich denn nun was da rein schreiben oO ?

    Also sprich das mit Form1.txtBox1.Text = "lol" geht nicht .


    LG Farin
     
  8. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Mit hilfe der winapi ? (FindWindow, GetDlgItem, SendMessage)
     
  9. 27. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Am besten machst du es so, dass die HilfForm ein parent vom Typ Eingabeform hat. (Vllt fmParent oder so). Der Variablen weißt du dann deine Eingabeform zu und packst da eine public function rein, die den Text auf der Eingabeform verändert. Also vllt:
    Code:
    Dim myText as String
    myText = "bla"
    
    fmParent.setText(myText)
    
    Code:
    Private Sub setText(pText as String)
     Label1.Text = pText
    End Sub
    Also so ungefähr müsste das ausschauen. Hab noch nie was in VB geschrieben. Hauptsache du verstehst das Prinzip

    greez

    //Hab gerade meinen Text durchgelesen und gedacht: wtf

    Also nochmal ein wenig deutlicher:
    Hilfform hat ein Objekt vom Typ EingabeForm mit dem Namen fmParent.
    Code:
    Dim fmParent as new Eingabeform
    Diese Form soll die Eingabeform sein, damit man aus der Hilfform auf die Funktionen des Parents zugreifen kann. Eine Funktion (setText) der Eingabeform soll dann den Text des Labels oder was auch immer setzen.
     
  10. 29. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    @cable Das würde bestimmt funktionieren, aber die Frage ist, ob das dann noch wirklich "sauber" programmiert ist. Denn die Hilfe ist ja ein Teil der Eingabeform und nicht andersrum. Das wirkt dann ein wenig "unlogisch", wenn sich das später mal ein anderer Programmierer anschaut.

    @test@private.co ich werde mir das mal mit der winapi anschauen, wobei ich damit noch nie gearbeitet habe :/. Vll. ist es ja das was ich suche.

    Ich habe mir überlegt ob vll. Folgendes geht. Das man quasi ein Sender und Empfänger hat. (einfach ausgedrückt). Sprich wenn ich auf das DataGridview doppelklicke das über den Sender (Hilfsform) etwas an den Empfänger (Eingabeform gesendet wird). Geht das ? oder gibts da ne andere Lösung die besser/einfacher/schneller/effektiver ist ?

    LG Farin

    //Edit

    Die Winapi scheint die richtige Lösung zu sein. Zumindest das was ich bis jetzt gelesen habe. BW gibts später . Naja ich werds damit versuchen und die Lösung noch veröffentlichen. Falls Probleme sind werde ich mich wieder melden


    //Edit 2

    Weiss einer wie das mit der api funst ?
    LG Farin
     
  11. 29. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Du meinst vllt SendMessage aus der WinApi. Meiner Meinung nach ist das aber unsauber.

    Hab mal ei nwenig gegooglet, aber meine Lösung scheint verbreitet zu sein. Schau mal hier:


    C# - Kommunikation zwischen zwei Forms


    greez

    //edit: Okay, meine Lösung ist wohl doch nicht astrein

    Hab mal geschaut und gesehen, dass es mit einer "loosen Kopplung" geregelt werden soll mit Events. Genaueres habe ich nocht nicht rausgesucht. kannst mal mal Google anschmeißen.

    //unten unter Sibling to Sibling wird es ganz gut beschrieben
    Passing Values between Forms in .NET 1.x with C# and VB.NET examples - CodeProject
     
  12. 29. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Hab es zwar noch nie gemacht, aber gehts das nicht am besten mit Invoke ?

    Hab hier ein Beispiel gefunden, nach dem man eigentlich nur eine benutzerdefniert Funktion in der Zielklasse defnieren müsste:
    Und hier auch noch ein Beispiel: http://dotnet-snippets.de/dns/threadsicherer-codeaufruf-im-control-kontext-invoking-SID1177.aspx

    //Edit:
    Hab glaub was verwechselt zwischen Instance und Thread.

    Das du auf deine textbox nicht zugreifen kannst liegt wohl daran das der Designer
    diese als private deklariert, eine änderung in der entsprechneden Unit ("Form1.Designer.cs")
    sollte den zugriff mittels Form1.txtBox1.Text = "lol"; wieder ermöglichen:

    Code:
    [COLOR="#0000ff"]private[/COLOR] System.Windows.Forms.[COLOR="YellowGreen"]TextBox[/COLOR] txtBox1;
    in
    [COLOR="Blue"]public[/COLOR] System.Windows.Forms.[COLOR="#9acd32"]TextBox[/COLOR] txtBox1;
    
    Mfg Rushh0ur
     
  13. 30. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Aber das geht doch nur, wenn die Formulare sich kennen und das tun sie nicht. Deshalb würde ich beim instanzieren der Forms eine Referenz zum jeweils anderen Formular mitgeben, damit die Funktionen von einer anderen Form aufgerufen werden können. (Natürlich geht das nur mit einer Form, die als Referenz übergeben werden kann. Die andere müsste eine Funktion haben, der man eine Form als als Reference übergibt.)
    Aber ich würde die Form auf keinen Fall public machen, sondern eher eine Property hinzufügen, die public ist und intern auf das Steuerelement zugreift (oder eben auf die Variable).

    Code:
    [COLOR="Blue"]public[/COLOR] [COLOR="Navy"]string[/COLOR] setText
    {
     [COLOR="Navy"]set[/COLOR] { TextBox1.Text = [COLOR="Blue"]value[/COLOR]; }
    }
    
     
  14. 30. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Hey,

    das mit der Referenz hört sich ganz gut an, aber wie übergebe ich denn so ein Formular als Referenz. Irgendwie wills mir gerade nicht in den Kopf gehen wie das funktioniert xD.
    Soll ich mir das ungefähr so vorstellen, das ich die ganze Form im Konstruktor übergebe, oder verstehe ich da etwas falsch dran. (Ich glaub ich habe das noch nicht ganz verstanden wie du das meinst ) . Wahrscheinlich sehe ich mal wieder den Wald vor lauter Bäumen nicht xD.

    LG Farin
     
  15. 30. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Man kann Werte ja by value und by reference übergeben. Wenn man sie per value übergibt, dann wird der Wert kopiert und in der Funktion wird die Kopie behandelt. Übergibt man einen Wert by reference, so wird das originale Objekt weitergegeben. Wenn man in einer Funktion diesen Wert verändert, dann wird auch der Originalwert verändert.
    Dazu gibt es etliche Beispiele im Netz. Such mal nach Call by Reference . (bei C# mit Schlüsselwort ref oder out)

    Du machst das auch so un übergibst der 2. Form Form 1 by reference. Hier kannst du dir das ref sparen, wenn due die 2. Form in der 1. Form aufrufst.

    Konstruktorkopf sähe so aus:
    Code:
    public Form2(Form1 form1)
    {...}
    Un so rufst du es in Form 1 auf:
    Code:
    Form2 myForm2 = new Form2(this);
    Jetzt kannst du die Reference der Form1, die im Konstruktor der Form2 vorhanden ist in einer Variablen speichern und hast so ständig Zugriff darauf!

    Ich hoffe das ist halbwegs verständlich

    greez

    //edit: C# calling parent functions from child form - C# - Codecall

    der 2. Beitrag erklärts echt gut
     
  16. 31. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    oO.

    Ja ich weiß das man Objekte als Ref. übergeben kann xD. Aber ich habe mal wieder verdrängt das eine Form nichts anderes ist als ein Objekt -.-^^. Die Umstellung von Ablauforientiert auf Objektorientiert ist nicht so einfach xD.

    Hat auch funktioniert . Damit ist das Problem vom tisch herzlichen dank für die ganzen antworten

    LG Farin
     
  17. 31. Juli 2009
    AW: Parameter/Daten Form übergreifend übergeben

    Und damit Thema geschlossen.
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.