Laden...

Textbox von form 1 aus Textbox von Form 2 füllen

Erstellt von DWE vor 8 Jahren Letzter Beitrag vor 8 Jahren 7.672 Views
D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren
Textbox von form 1 aus Textbox von Form 2 füllen

Hallo c#ler ...

Ich versuche aktuell meine Textbox von einer anderen Textbox aus einer anderen Form füllen zu lassen.
Sprich, das ich in Form 2 auf eine Textbox klicke und dieser Inhalt wird mir in meine Textbox von Form 1 kopiert.

Ich habe zwar viel gefunden im Internet, leider klappt dies bei mir nicht. Es hängt immer an "textbox1.Text....". Folgende Fehlermeldung bekomme ich.

Fehlermeldung:
Fehler 1 'System.Windows.Forms.DataGridViewTextBoxColumn' enthält keine Definition für 'Text', und es konnte keine Erweiterungsmethode 'Text' gefunden werden, die ein erstes Argument vom Typ 'System.Windows.Forms.DataGridViewTextBoxColumn' akzeptiert (Fehlt eine Using-Direktive oder ein Assemblyverweis?).

Das sind meine Verweise:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

Ich weis leider nicht, wo mein Problem ist. Ich muss den Inhalt der einen Textbox(aus Form 2) ansprechen und muss sagen "Du bist jetzt auch Inhalt von der Textbox aus Form 1"

Kann mir jemand weiterhelfen ?

Wäre sehr Dankbar.

Mit freundlichen Grüßen
Daniel

Hinweis von Coffeebean vor 8 Jahren

Bitte benutze Code-Tags [Hinweis] Wie poste ich richtig? Punkt 6

2.207 Beiträge seit 2011
vor 8 Jahren

Sieht so aus, als weist du der ...Column deines GridViews einen Text (String) eine zu. Willst du eventuell auf den Inhalt der Column/Cell?

[FAQ] Kommunikation von 2 Forms ist sicher auch noch hilfreich.

Gruss

Coffeebean

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

Ja, ich will eigentlich den Inhalt von Textfeld 2 nach Textfeld 1 kopieren lassen. Hab Heute den ganzen Tag mit lesen verbracht. Hab leider keine Idee mehr.

2.298 Beiträge seit 2010
vor 8 Jahren

Du hast kein Textfeld. Du hast Spalten in einem DataGridView. Du versuchst deinen Text auf eine Spalte zu zu weisen, was totaler quatsch ist.

Richtiger wäre es die konkrete Zelle zu ermitteln und dieser per Value-Property den Wert zuzuweisen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

Ja. Meinte Textboxen. Zumindest ist das der Typ meiner Spalte um die es geht und ich will den Text/Inhalt einer speziellen Zelle zuweisen. Also nicht der gesamten Spalte.

Leider steh ich auf dem Schlauch und wäre für "Stöße" 😁 in die richtige Richtung dankbar. Denn aktuell bin ich mit meinem Latein am Ende...

Ich danke im Voraus

2.298 Beiträge seit 2010
vor 8 Jahren

Nun, sofern du weist, welche Zeile und welche Spalte es ist folgendes:


// myRowIndex ist natürlich ein Wert, der die Zeile angibt
DataGridViewRow row = dataGridView.Rows[myRowIndex];
// myColumnName ist der Name der Spalte um die es geht
DataGridViewCell cell = row[myColumnName];
cell.Value = "Dies ist ein Text"; 

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

kann ich nicht einfach sagen e.RowIndex bzw e.ColumnIndex anstatt einem fixen Wert / Namen ?
Falls ja, warum kommt dann die Meldung "Bezeichner erwartet" vor dem e.ColumnIndex ?

Die Spalte aus der Ich auswählen kann ist immer die selbe, aber die Zeile variiert. Das ist eine Liste mit Namen, die der Benutzer anklicken kann. Dieser Name soll dann in Form 1 an die bestimmte Stelle geschrieben werden.

Gibt es da evtl Doku Material zu ? Hänge da nämlich ziemlich in der Luft und verstehe nur sehr viel Bahnhof. Selber habe ich nichts gefunden.

Ich denke meine ganzen fragen hier zu posten, wäre nicht Sinn der Sache und Spam. Wenn einer trotzdem sich diesem annehmen will, so möge er sich an seinen Stuhl binden und sich melden 😁 😁

H
523 Beiträge seit 2008
vor 8 Jahren

kann ich nicht einfach sagen e.RowIndex bzw e.ColumnIndex anstatt einem fixen Wert / Namen? Falls ja, warum kommt dann die Meldung "Bezeichner erwartet" vor dem e.ColumnIndex ?

Wenn Du uns Deinen Code zeigst können wir Dir vielleicht helfen.

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

ok ... Danke schon mal.

Form1:

public partial class Form1 : Form
    {
        public Form1()
        {

            InitializeComponent();
        }
        private string _test;
        public string  Test
        {
            get { return _test ; }
            set
            {

                _test = value;

                // erfassungsdatenDataGridView.Rows[1].Cells[5].Value = Test;

                MessageBox.Show(Test);
                TEXTFELD.Text = Test;
            }
        }


 private void erfassungsdatenDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            
            Form2 form2 = new Form2();
            form2.Show();

        }

Form2:

        private void contactDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {

            Form1 form1 = new Form1();

            form1.Test = "blablabla";
            this.Close();
        }

Das sind die Codeschnipsel um die es geht. Möchte jetzt erst mal schaffen das es soweit klappt, bevor ich noch komplizierter werde.
Bei meiner Messagebox.Show Ausgabe, zeigt er mir das richtige an(blablabla). Aber er schreibt mir nichts in meine Textbox. Und wenn Ich versuche, meine DataGridView zu füllen, sagt er mir "Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Auflistung sein.", was eigentlich nicht sein kann. Aber ich wäre erst mal froh, wenn Ich verstehe, warum meine Textbox, die nicht in dem DataGridView enthalten ist, da ich diese nur zu Test zwecken erstellt habe, nicht gefüllt wird.

J
251 Beiträge seit 2012
vor 8 Jahren

"Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Auflistung sein."

Hast du einen Beweis, dass der Fehler nicht der ist, der er wäre?..

Mal ne Frage zum Workflow.. Es gibt Form1(1) mit DGV, welches per CellContentClick Form2 aufruft. In Form2 gibt es ein DGV, welches per CellClick einen Form1(2) initialisiert, die Property "Test" setzt und sich dann schließt. Im Anschluss befindest du dich in Form(1)... -> Du hast Textbox "TEXTFELD" in Form(2) gefüllt 😉 [EDIT] Ist die Kommunikation zwischen den Forms noch nicht ganz gerade? [/EDIT]

Hast du dir evtl mal den FAQ von Coffeebean betrachtet?

771 Beiträge seit 2009
vor 8 Jahren

Was soll denn der untere Code (Form2)? Du erzeugt ein neues Fenster, zeigst es aber nicht an und dann schließt du es wieder.
Also nimm mal


Form1 form1 = new Form1();
form1.Test = "blablabla";
form1.ShowDialog();

Und Coffeebean hat ja schon auf den FAQ-Beitrag hingewiesen.

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

Mein erfassungsdatenDataGridView hat aktuell 2 Reihen und 10 Spalten. Also sollte doch Bereich technisch alles ok sein, oder ?

zum Workflow.
Meine Main Form (Form 1, ruft per CellContentClick Form2 auf. Form 2 ist ebenfalls ein DGV. Und später soll es so sein, das ich auf eine Zelle klicken kann, und diese dann in eine variabel gespeichert wird, welche ich dann einer Zelle auf Form1 zuweise. Aktuell sage ich, bzw möchte ich sagen, bei klick auf eine Zelle von Form 2, speichere in die Variabel "Test" "bla bla bla"

dieses Form1 form1 = new Form1();
hab ich gemacht, um die variabel "Test" zu bekommen, die ich in Form1 deklariert habe. Es kann gut sein, dass das totaler Schwachsinn ist, bin ja noch am lernen. Müsste dann nur wissen, wie ich es stattdessen machen müsste.

danach schließt sich meine Form2 wieder und in Form 1 will ich die soeben gefüllt variabel nutzen und sag in Form1: "TEXTFELD.Text = Test". Daher verstehe ich nicht, warum ich meine Textbox "TEXTFELD" in Form(2) gefüllt haben soll.

Aber du hast recht, irgendwas stimmt mit meiner Kommunikation nicht ...
Den FAQ Beitrag werde ich mir gleich erneut anschauen.

189 Beiträge seit 2014
vor 8 Jahren

So wie ich das verstehe, willst du mit

private void contactDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {

            Form1 form1 = new Form1();

            form1.Test = "blablabla";
            this.Close();
        }

eigentlich nur auf dein vorhandenes Fenster zugreifen, richtig?
Du legst aber mit diesem Code ein neues Formular mit Namen form1 vom Typ Form1 an.
Aber du musst im Konstruktor von Form2 das aufrufende Objekt(!) form1 übergeben, um den Rest so zu machen, wie du ihn geschrieben hast.
Damit ist auch klar, was an deinem Code falsch ist:
Du setzt von einem !neuen! Formular form1 die Property Test.
Auch ohne dieses neue Form zu zeigen wird von diesem neuen Formular die MessageBox aktiviert.
Dann wird in diesem neuen (zu form2 gehörenden) form1 die TextBox auf den Wert "blablabla" gesetzt.
Da aber für diese niemals .Show() gerufen wurde, siehst du das natürlich nicht.
Lösung: s.o.

VG Ezio

EDIT: Das Wörtchen "new" ist auch ein gutes Indiz dafür, dass du etwas "neu" erzeugst. 😉

16.835 Beiträge seit 2008
vor 8 Jahren

Eigentlich ist in dem Link, den Coffeebean bereits genannt hatte ( [FAQ] Kommunikation von 2 Forms ) ausnahmslos alles gesagt.
Man hätte den Artikel einfach nur durchlesen und befolgen sollen.

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

ok, das erklärt einiges. Im Grunde einleuchtend. Ich weiß zwar nicht was du mit "Lösung: s.o" meinst, bzw. wo es steht, aber so kann ich zumindest mal weiter googeln und rätseln 😁 😁

Cat, bei deinem Code, würde ich doch auch wieder ein neues Formular erstellen, oder ?

Bin den Artikel grade nochmal am Lesen. Als ich den letzte Woche gelesen habe, habe ich leider nicht alles verstanden.

189 Beiträge seit 2014
vor 8 Jahren

Hallo DWE,

cat ist wahrscheinlich davon ausgegangen, dass du bewusst ein "new Form1()" erzeugst und dann hätte dir nur noch ein "form1.Show()" gefehlt.
Mit "Lösung: s.o." meinte ich, dass du "im Konstruktor von Form2 das aufrufende Objekt(!) form1 übergeben" musst.

Also


... class Form2 ...
{
    private Form1 myForm1;
    public Form2(Form1 form1)
    {
        ...
        myForm1 = form1;
    }
...
    private void contactDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
    {
    ...
        myForm1.Test = ...;
    }
}

D
DWE Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

Hallo Ezio,

dies ist mir nun auch bewusst. Habe es so eben, vor dem lesen des Beitrags, geschafft 😃

Vielen Vielen Dank, für die Hilfe und mühe die Ihr mit mir hattet 😄