Stuur waarden van het ene formulier naar het andere

Ik wil waarden doorgeven tussen twee formulieren (c#). Hoe kan ik het doen?

Ik heb twee formulieren: Form1 en Form2.

Formulier1 bevat één knop. Als ik op die knop klik, zou Form2 moeten openen en zou Form1 in inactieve modus moeten staan ​​(d.w.z. niet selecteerbaar).

Formulier2 bevat één tekstvak en één verzendknop. Wanneer ik een bericht typ in het tekstvak van Form2 en op de verzendknop klik, moet Form2 worden gesloten en moet Form1 worden gemarkeerd met de verzonden waarde.

Hoe kan ik dat doen? Kan iemand me helpen om dit te doen met een eenvoudig voorbeeld.


Antwoord 1, autoriteit 100%

Er zijn verschillende oplossingen hiervoor, maar dit is het patroon dat ik meestal gebruik.

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

En…

// Inside Form2
// Create a public property to serve the value
public string TheValue 
{
    get { return someTextBoxOnForm2.Text; }
}

Antwoord 2, autoriteit 69%

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

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

Antwoord 3, autoriteit 25%

Definieer een eigenschap

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

In het form2

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

De gegevens ophalen in Form1en form3

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

Antwoord 4, autoriteit 11%

Na een reeks strijd om de gegevens van het ene formulier naar het andere door te geven, heb ik eindelijk een stabiel antwoord gevonden. Het werkt als een tierelier.

Het enige wat u hoeft te doen is een variabele declareren als public static datatype 'variableName'in de ene vorm en de waarde toewijzen aan deze variabele die u wilt doorgeven aan een andere vorm en deze variabele in een andere vorm noemen formulier rechtstreeks de formuliernaam gebruiken (Maak geen object van dit formulier omdat statische variabelen direct toegankelijk zijn) en toegang krijgen tot deze variabelewaarde.

Voorbeeld hiervan is,

Formulier1

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

Formulier2

TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2

Antwoord 5, autoriteit 6%

Declareer een openbare string in Form1

public string getdata;

In knop van Form1

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

Om gegevens naar Form1te sturen, kun je elke gebeurtenis en code proberen die in die gebeurtenis volgt

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

Na het sluiten van form2en het openen van Form1, kunt u geretourneerde gegevens gebruiken in de tekenreeks getdata.


Antwoord 6, autoriteit 5%

Ik heb aan verschillende winform-projecten gewerkt en naarmate de applicaties complexer worden (meer dialogen en interacties ertussen), ben ik een eventingsysteem gaan gebruiken om me te helpen, omdat het handmatig beheren van het openen en sluiten van vensters moeilijk te onderhouden en verder te ontwikkelen zijn.

Ik heb CABgebruikt voor mijn applicaties, het heeft een eventsysteem maar het kan in jouw geval een overkill zijn 🙂 Je zou kunnen schrijf je eigen evenementenvoor eenvoudigere toepassingen


Antwoord 7, autoriteit 3%

declareer string in form1
openbare string TextBoxString;

in formulier1 klik evenement toevoegen

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 constructer

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

in form2 kratvariabele Form1 firstformRef;

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

Antwoord 8, autoriteit 3%

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();
        }

Het werkt!


Antwoord 9, autoriteit 3%

In deze code geef je een tekst door aan Form2. Form2 toont die tekst in textBox1.
Gebruiker typt nieuwe tekst in textBox1 en drukt op de verzendknop.
Form1 pakt die tekst en toont het in een tekstvak op Form1.

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;
        }
    }
}

En dit is 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();
    }
}

Antwoord 10, autoriteit 3%

Ok, dus Form1heeft een tekstvak, allereerst moet je dit Form1tekstvak op openbaar zetten in de tekstvakeigenschap.

Codeformulier1:

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

Geef Form1door als thisin de constructor.

Codeformulier2:

Private Form1 _firstForm;
Public Form2(Form1 firstForm)
{
    _firstForm = firstForm:
}
Public button_click()
{
    _firstForm.textBox.text=label1.text;
    This.Close();
}

Antwoord 11, autoriteit 2%

u kunt als parameter het tekstvak van Form1 als volgt doorgeven:

Op Form 1 buttom handler:

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

Op formulier 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();
}

Antwoord 12, autoriteit 2%

Constructeurs zijn de beste manieren om gegevens tussen formulieren of Gui-objecten door te geven, u kunt dit doen.
In de form1 click-knop zou je het volgende moeten hebben:

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

In formulier 2, wanneer de gebruiker op de knop klikt, zou deze een code als deze of iets dergelijks moeten hebben:

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

Eenmaal binnen de formulierbelasting van formulier 1 kunt u code toevoegen om alles te doen, aangezien u de waarden van de constructor krijgt.


Antwoord 13

Hoe de waarden van formulier naar een ander formulier over te dragen

1.) Ga naar Form2 en dubbelklik erop. Typ dit bij de code.

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

2.) Ga naar Formulier1 en dubbelklik erop. Typ dit bij de code.
//Op je commandoknop in Form1

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

Antwoord 14

Dit is heel eenvoudig.
stel dat je formulier Form1 en Form2 met 2 vensters hebt en dat je het record van textbox1 van Form1 naar Form2 wilt sturen en dit record wilt weergeven in label1 van Form2;
maak vervolgens in Form2 een label met de naam label1 en ga naar de eigenschap van label1 en stel ‘Modifiers’=public in en maak in Form one een textBox met id textBox1 en een knop met de naam ‘submit’ en schrijf vervolgens de volgende code op button click event

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

dat is het…
op deze manier kunt u een datasetrecord binden aan de datagridview van een ander formulier……


Antwoord 15

Je kunt desgewenst een andere aanpak gebruiken.

  1. Systeem gebruiken.Action (Hier geeft u eenvoudig de hoofdformulierfunctie door als parameter aan het onderliggende formulier, zoals een callback-functie)
  2. OpenForms-methode (u roept direct een van uw open formulieren aan)

System.Action gebruiken

Je kunt het zien als een callback-functie die wordt doorgegeven aan het onderliggende formulier.

// -------- 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

Deze methode is eenvoudig (2 regels). Maar werkt alleen met formulieren die open zijn.
Het enige wat u hoeft te doen is deze twee regels toe te voegen waar u ook maar wat gegevens wilt doorgeven.

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

Ik heb hier

mijn antwoord op een vergelijkbare vraag gegeven


Antwoord 16

U kunt dit gebruiken;

Formulier1 knop1 klik

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

En voeg dit toe aan Form2

public string info = "";

Formulier2 knop1 klik

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;
}

Antwoord 17

Als u de eigenschap Modifiers van een besturingselement in een formulier wijzigt in Openbaar, heeft een ander formulier toegang tot dat besturingselement.
bijv. :

   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        
    }

Antwoord 18

// In form 1
public static string Username = Me;
// In form 2's load block
string _UserName = Form1.Username;

Antwoord 19

Hoe zit het met het gebruik van een openbaar evenement

Ik zou het zo doen.

public class Form2
{
   public event Action<string> SomethingCompleted;
   private void Submit_Click(object sender, EventArgs e)
   {
       SomethingCompleted?.Invoke(txtData.Text);
       this.Close();
   }
}

en noem het zo vanuit Form1.

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

Form1 kan dan een sms krijgen van Form2 wanneer Form2 is gesloten

Bedankt.

Other episodes