2016-07-19 15 views
-1

hey alle, die ich gerade versuche, ein Formular zu aktualisieren, sobald Änderungen an einer Sekunde vorgenommen werden. Auf meiner ersten Form drücke ich einen Knopf "create", der ein anderes Formular, form2, öffnet. Dieses zweite Formular enthält Eingabefelder und ermöglicht die Eingabe von Werten, die Comboboxen auf dem ersten Formular auffüllen. Auf der zweiten Form gibt es eine Schaltfläche "update" Ich möchte die erste Form aktualisieren, sobald Update auf die erste gedrückt wird.Aktualisieren Sie ein Formular, nachdem Sie Änderungen an der zweiten

Ich weiß, es gibt this.refresh();, aber ich bin mir nicht sicher, ob das für mich nützlich ist. Ich versuche, etwas entlang der Linien von:

Auf form2 -

Private void Form2UpdateButton_Click 
{ 
    //do update stuff 
    Form1_load.Refresh(); 
} 

oder vielleicht

private void Form2UpdateButton_Click 
    { 
    //do update stuff 
    Form1.close(); 
    Form1.Open(); 
    } 

Ich bin noch ziemlich neu in C# und die Interaktion 2 bilden zusammen ein ziemlich komplexes Konzept ist Bitte lass es mich wissen, wenn ich das falsch mache. Meine Aktualisierung kann an der falschen Stelle sein, aber ich denke, das ist, was ich will.

+0

Sie können einen Listener auf Ihr Formular1 schreiben, um ein bestimmtes Ereignis zu sehen. – Adam

+0

Könnten Sie bitte erläutern, was ein Listener ist – asdfsa

+0

würde dieser Listener für die Update-Taste auf Form2 gedrückt werden und das würde mir erlauben, dies zu tun.Refesh auf Form1? Aber wie würde form1 die Update-Schaltfläche sehen, wenn die Update-Schaltfläche nur auf form2 ist? – asdfsa

Antwort

0

Erstellen Sie ein eigenes Ereignis in Form2, das ausgelöst wird, wenn auf die Schaltfläche geklickt wird. Auf diese Weise können Sie nur form2.OnUpdateClicked += yourMethod. Wie folgt aus:

public partial class Form1 : Form 
{ 
    private void CreateForm2() 
    { 
     Form2 frm2 = new Form2(); 
     // Hook the event of form2 to a method 
     frm2.PropertyUpdated += Form2Updated; 
    } 

    private void Form2Updated(object sender, EventArgs e) 
    { 
     // this will be fired 
    } 
} 

public partial class Form2 : Form 
{ 
    // On form2 create an event 
    public event EventHandler PropertyUpdated; 

    private void Form2UpdateButton_Click() 
    { 
     // If not null (e.g. it is hooked somewhere -> raise the event 
     if(PropertyUpdated != null) 
      PropertyUpdated(this, null); 
    } 
} 
0

Empfehlungen:

Ihre zweite Form sollte mit einem Verweis auf erste geschaffen werden, das heißt,

Form1:

public void RefreshParameters() 
{ 
    // ... do your update magic here 
} 

private void openForm2(..) 
{ 
    // Pass your current form instance (this) to new form2 
    var aForm = new Form2(this); 
    aForm.Show(); // show, run, I don't remember... you have it 
} 

Form2:

// Here you will store a reference to your form1 
form1 daddy = null; 

// A new constructor overloading default one to pass form1 
public Fomr2(Form1 frm):base() 
{ 
    daddy = frm; // Here you store a reference to form1! 
} 

public void UpdateDaddy() 
{ 
    // And here you can call any public function on form1! 
    frm.RefreshParameters(); 
} 
0

Ein Weg ist mit einem Bezug von Form1 auf Form2, wie dies passiert:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void buttonLaunchForm_Click(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     form2.LauncherForm = this; 

     form2.Show(); 
    } 

    public void RefreshFormData() 
    { 
     // Refresh 
    } 
} 

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form1 LauncherForm { set; get; } 

    private void buttonUpdate_Click(object sender, EventArgs e) 
    { 
     // do your normal work then: 

     LauncherForm.RefreshFormData(); 
    } 
} 

Die obige Technik "Property-Injection" genannt wird;

+0

Diese Methode für Formular 1 würde dazu führen, dass ich eine Aktualisierungsschaltfläche in Formular 1 erstellen muss: private void buttonUpdate_Click (Objektabsender, EventArgs e) { Form1.RefreshFormData(); } – asdfsa

+0

Wenn möglich, ich möchte nicht eine Update-Taste auf Form1 erstellen. Ich möchte die Update-Taste auf form2, um die Form1_Load – asdfsa

+0

@asdfsa auslösen, tut mir leid, keine Notwendigkeit dafür. bearbeitet. – user3185569

Verwandte Themen