it-swarm.com.de

Werte von einem Formular an ein anderes senden

Ich möchte Werte zwischen zwei Formularen (c #) übergeben. Wie kann ich es tun?

Ich habe zwei Formulare: Form1 und Form2. 

Form1 enthält eine Schaltfläche. Wenn ich auf diese Schaltfläche klicke, sollte sich Form2 öffnen und Form1 sollte sich im inaktiven Modus befinden (d. H. Nicht auswählbar).

Form2 enthält ein Textfeld und eine Senden-Schaltfläche. Wenn ich eine Nachricht in das Textfeld von Form2 eingebe und auf die Schaltfläche "Senden" klicke, sollte sich Form2 schließen und Form1 sollte mit dem übergebenen Wert hervorgehoben werden.

Wie kann ich es tun? Kann mir jemand mit einem einfachen Beispiel helfen?.

65
Nagu

Es gibt verschiedene Lösungen, aber dies ist das Muster, das ich normalerweise verwende.

// Form 1
// inside the button click event
using(Form2 form2 = new Form2()) 
{
    if(form2.ShowDialog() == DialogResult.OK) 
    {
        someControlOnForm1.Text = form2.TheValue;
    }
}

Und...

// Inside Form2
// Create a public property to serve the value
public string TheValue 
{
    get { return someTextBoxOnForm2.Text; }
}
43
Jesper Palm
private void button1_Click(object sender, EventArgs e)
{
        Form2 frm2 = new Form2(textBox1.Text);
        frm2.Show();    
}

 public Form2(string qs)
    {
        InitializeComponent();
        textBox1.Text = qs;

    }
33
nadi

Definieren Sie eine Eigenschaft

public static class ControlID {  
    public static string TextData { get; set; }
}

Im form2

private void button1_Click(object sender, EventArgs e)
{  
    ControlID.TextData = txtTextData.Text;   
}

Daten in form1 und form3 abrufen

private void button1_Click(object sender, EventArgs e)
{   
    string text=  ControlID.TextData;   
}
11
shweta

Nach einer Reihe von Schwierigkeiten, die Daten von einem Formular in ein anderes zu übergeben, fand ich schließlich eine stabile Antwort. Es funktioniert wie ein Zauber.

Alles, was Sie tun müssen, ist, eine Variable in einem Formular als public static datatype 'variableName' zu deklarieren und dieser Variablen, die Sie an ein anderes Formular übergeben möchten, den Wert zuzuweisen, und diese Variable in einem anderen Formular direkt mit dem Formularnamen aufzurufen ( Kein Objekt erstellen Auf dieses Formular als statische Variablen kann direkt zugegriffen werden ) und auf diesen Variablenwert zugegriffen werden.

Ein Beispiel dafür ist

Form 1

public static int quantity;
quantity=TextBox1.text; \\Value which you want to pass

Form2

TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2
5
Sujith H S

Deklarieren Sie eine öffentliche Zeichenfolge in form1

public string getdata;

Im Button von form1

form2 frm= new form2();
this.hide();
form2.show();

Um Daten an form1 zu senden, können Sie jedes beliebige Ereignis und Code versuchen, das diesem Ereignis folgt

form1 frm= new form1();
form1.getdata="some string to be sent to form1";

Nach dem Schließen von form2 und dem Öffnen von form1 können Sie zurückgegebene Daten in getdata string verwenden.

5
Hassan Raza

deklarieren Sie den String in form1 public string TextBoxString;

in form1 click event hinzufügen

private void button1_Click(object sender, EventArgs e)
    {
        Form1 newform = new Form1();
        newform = this;
        this.Hide();
        MySecform = new Form2(ref newform);
        MySecform.Show();
    }

in Form2 Konstruktor

public Form2(ref Form1 form1handel)
    {
        firstformRef = form1handel;
        InitializeComponent();
    }

in form2-Kistenvariable Form1 firstformRef;

private void Submitt_Click(object sender, EventArgs e)
    {
        firstformRef.TextBoxString = textBox1.Text;
        this.Close();
        firstformRef.Show();

    }
3
Naruto

Ich habe an verschiedenen Winform-Projekten gearbeitet, und da die Anwendungen komplexer werden (mehr Dialoge und Interaktionen zwischen ihnen), habe ich begonnen, ein Eventing-System zu verwenden, um mir zu helfen, da das manuelle Öffnen und Schließen von Fenstern schwierig wird pflegen und weiterentwickeln. 

Ich habe CAB für meine Anwendungen verwendet, es hat ein Eventing-System , aber es könnte in Ihrem Fall ein Overkill sein :) Sie könnten Ihre eigenen Ereignisse schreiben für einfachere Anwendungen

3
armannvg

Form1-Code:

private void button1_Click(object sender, EventArgs e)
{
            Form2 f2 = new Form2();
            f2.ShowDialog();
            MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2
}

Form2-Code:

        public Form2()
        {
            InitializeComponent();
            t = textBox1;                        //Initialize with static textbox
        }
        public static TextBox t=new TextBox();   //make static to get the same value as inserted
        private void button1_Click(object sender, EventArgs e)
        {

            this.Close();

        }

Es klappt! 

2
OverflowReturns

In diesem Code übergeben Sie einen Text an Form2. Form2 zeigt diesen Text in textBox1 . Der Benutzer gibt neuen Text in textBox1 ein und drückt die Schaltfläche "Senden" . Form1 greift diesen Text und zeigt ihn in einem Textfeld auf Form1 an.

public class Form2 : Form
{
    private string oldText;

    public Form2(string newText):this()
    {
        oldText = newText;
        btnSubmit.DialogResult = DialogResult.OK;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        textBox1.Text = oldText;
    }

    public string getText()
    {
        return textBox1.Text;
    }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}

Und das ist Form1-Code:

public class Form1:Form
{
    using (Form2 dialogForm = new Form2("old text to show in Form2"))
    {
        DialogResult dr = dialogForm.ShowDialog(this);
        if (dr == DialogResult.OK)
        {
            tbSubmittedText = dialogForm.getText();
        }
        dialogForm.Close();
    }
}
2
Ramazan Polat

Ok, Form1 hat ein Textfeld. Zuerst müssen Sie dieses Form1-Textfeld in der Textbox-Eigenschaft auf public setzen. 

Code Form1:

Public button1_click()
{
    Form2 secondForm = new Form2(this);
    secondForm.Show();
}

Übergeben Sie Form1 als this im Konstruktor.

Code Form2:

Private Form1 _firstForm;

Public Form2(Form1 firstForm)
{
    _firstForm = firstForm:
}

Public button_click()
{
    _firstForm.textBox.text=label1.text;
    This.Close();
}
1
windrider63

Konstruktoren sind die besten Methoden, um Daten zwischen Formularen oder Gui-Objekten zu übergeben. Dazu können Sie Folgendes tun: In der form1-Schaltfläche klicken Sie auf Folgendes:

Form1.Enable = false;
Form2 f = new Form2();
f.ShowDialog();

Wenn der Benutzer in Formular 2 auf die Schaltfläche klickt, sollte er einen Code wie diesen oder einen ähnlichen Code haben:

this.Close();
Form1 form = new Form1(textBox1.Text)
form.Show();

Wenn Sie sich innerhalb des Formularladevorgangs von Formular 1 befinden, können Sie Code hinzufügen, um etwas zu tun, wenn Sie die Werte vom Konstruktor abrufen.

1
FELIXKIPRONO

Einfach den Wert mit:

var form1 = new Form1();
string sample = form1.examplestring;

Um den Wert einzustellen:

var form1 = new Form1();
form1.examplestring = example;

aber überprüfen Sie die Zeichenfolge als "öffentliche Zeichenfolge"

public string example = "test";
0
Dimitris Toulis

Sie können einen anderen Ansatz verwenden, wenn Sie möchten.

  1. Verwenden von System.Action (Hier übergeben Sie einfach die Hauptformularfunktion als Parameter an das untergeordnete Formular wie eine Rückruffunktion)
  2. OpenForms-Methode (Sie rufen direkt eines Ihrer geöffneten Formulare an)

Verwenden von System.Action

Sie können es sich als eine Rückruffunktion vorstellen, die an das untergeordnete Formular übergeben wird.

// -------- IN THE MAIN FORM --------

// CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS
Options frmOptions = new Options(UpdateSettings);
frmOptions.Show();

// YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED
public void UpdateSettings(string data)
{
   // DO YOUR STUFF HERE
}

// -------- IN THE CHILD FORM --------

Action<string> UpdateSettings = null;

// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
    InitializeComponent();
    this.UpdateSettings = UpdateSettings;
}

private void btnUpdate_Click(object sender, EventArgs e)
{
    // CALLING THE CALLBACK FUNCTION
    if (UpdateSettings != null)
        UpdateSettings("some data");
}

OpenForms-Methode 

Diese Methode ist einfach (2 Zeilen). Funktioniert jedoch nur mit Formularen, die geöffnet sind ..__ Alles, was Sie tun müssen, ist, diese beiden Zeilen dort hinzuzufügen, wo immer Sie Daten übergeben möchten.

Main frmMain = (Main)Application.OpenForms["Main"];
frmMain.UpdateSettings("Some data");

Ich habe meine Antwort auf eine ähnliche Frage gegeben hier

0
Ozesh

Sie können dies verwenden.

Klicken Sie auf Formular1-Button1

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    this.Hide();
    frm2.Show();
}

Fügen Sie dies zu Form2 hinzu

public string info = "";

Klicken Sie auf Formular2-Button1

private void button1_Click(object sender, EventArgs e)
{

    info = textBox1.Text;
    this.Hide();
    BeginInvoke(new MethodInvoker(() =>
    {
        Gogo();
    }));
}

public void Gogo()
{
    Form1 frm = new Form1();
    frm.Show();
    frm.Text = info;
}
0
SerkanS

wenn Sie die Modifizierer-Eigenschaft eines Steuerelements in einem öffentlichen Formular ändern, können andere Formulare auf das Steuerelement zugreifen. : 

    Form2 frm;
    private void Form1_Load(object sender, EventArgs e)
    {
        frm = new Form2();
        frm.Show();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(frm.txtUserName.Text); 
        //txtUserName is a TextBox with Modifiers=Public        
    }
0

Dies ist sehr einfach . Angenommen, Sie haben 2 Fensterformulare Form1 und Form2, und Sie möchten den Datensatz von Textbox1 von Form1 an Form2 senden und diesen Datensatz in label1 von Form2 anzeigen lassen.... Erstellen Sie dann in Form2 ein Label mit dem Namen label1 und gehen Sie zur Eigenschaft von label1 und setzen Sie 'Modifiers' = public. In Form 1 erstellen Sie eine TextBox mit der ID textBox1 und eine Schaltfläche mit dem Namen submit. Schreiben Sie dann den folgenden Code für das Klickereignis der Schaltfläche

button1_Click(object sender, EventArgs e)
{
  Form2 obj=new Form2();
  obj.label1.text=textBox1.text.ToString();
  obj.show();
}

das ist es ... auf diese Weise können Sie Datensatz-Datensätze an die Datenansicht eines anderen Formulars binden ......

0
Jeetendra Negi

Wie wäre es mit einer öffentlichen Veranstaltung?

Ich würde es so machen.

public class Form2
{
   public event Action<string> SomethingCompleted;

   private void Submit_Click(object sender, EventArgs e)
   {
       SomethingCompleted?.Invoke(txtData.Text);
       this.Close();
   }
}

und nennen Sie es von Form1 so.

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    using (var frm = new Form2())
    {
        frm.SomethingCompleted += text => {
            this.txtData.Text = text;
        };

        frm.ShowDialog();
    }
}

Form1 könnte dann einen Text von Form2 abrufen, wenn Form2 geschlossen wird

Vielen Dank.

0
Masuri

So übergeben Sie die Werte vom Formular an ein anderes Formular

1.) Springen Sie zu Form2 und doppelklicken Sie darauf. Am Code geben Sie diesen ein.

public Form2(string v)
{
  InitializeComponent();
  textBox1.Text = v;
}

2.) Springen Sie zu Form1 und doppelklicken Sie darauf. Geben Sie im Code Folgendes ein: // // In Ihrer Befehlsschaltfläche in Form1

private void button1_Click(object sender, EventArgs e)
{
   Form2 F2 = new Form2(textBox1.Text);
   F2.Show();
}
0
vishu_heak

sie können das Textfeld von Form1 wie folgt als Parameter übergeben:

Auf Formular 1-Buttom-Handler:

private void button2_Click(object sender, EventArgs e)
{
Form2 newWindow = new Form2(textBoxForReturnValue);
newWindow.Show(); 
}

Auf dem Formular 2

public static TextBox textBox2; // class atribute

public Form2(TextBox textBoxForReturnValue)
{
    textBox2= textBoxForReturnValue;
}

private void btnClose_Click(object sender, EventArgs e)
{

    textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim();
    this.Close();
}
0
Manuel