2016-04-16 24 views
-1

Ich habe zwei Formen "Form1" und "Form2" jetzt möchte ich Aufrufmethode "change_lbl()" in der in "Form1" von "Form2" existieren, aber wenn ich nannte diese Methode in "Form2" es ist nicht implementiert und nicht in der LageAufruf Methode in anderen Klasse (Windows Form) in C#

Codes Form1 zu erreichen:

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

    public void change_lbl() 
    { 
     lbl_form1.Text = "Its Done !"; 
    } 

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

Codes Form2:

public partial class Form2 : Form 
{ 
    Form1 frm1 = new Form1(); 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void btn_form2_Click(object sender, EventArgs e) 
    { 
     frm1.change_lbl(); 
     this.Close(); 
    } 
} 
+1

Jede Instanz, die 'new'-ed up ist eine separate Identität ist. Sie haben Formular 2, das ein Formular 1 erstellt, das ** ein anderes ** Formular 2 erstellen kann. Ist das nur ein schnelles Beispiel oder erstellen Sie tatsächlich mehrere Formulare aus jedem Formular? – OmegaMan

+0

Mögliches Duplikat von [Ich muss auf ein Formularsteuerelement von einer anderen Klasse zugreifen (C#)] (http://stackoverflow.com/questions/27658076/i-need-to-access-a-form-control-from-another- Klasse-c) – khlr

Antwort

2

Code ruft korrekt und Verfahren helfen! Sie erstellen und verwenden eine neue Instanz von Form1, ohne sie anzuzeigen, aber es sieht so aus, als würden Sie Änderungen in der Standardinstanz Form erwarten, die von Application verwendet wird und derzeit geöffnet ist. die offene Instanz Form1 Klasse zu haben:

Form1 myForm1=(Form1)Application.OpenForms["Form1"]; 
+0

danke Mehrdad, warum, wenn ich in upvote klicke, 0 für einen Moment in 1 umwandelte, aber es drehte sich out to 0 wieder –

+0

@ W01FSbane kein Problem, ich werde glücklich, wenn das Problem verrechnet –

+0

Ihre Antwort hat mir sehr geholfen Vielen Dank wieder –

0

ein EventHander in Form2 erstellen und abonnieren Sie dieses Ereignis in Form1. Arbeit des feinen

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

    private void btn_form2_Click(object sender, EventArgs e) 
    { 
     if(ButtonClicked != null); 
      ButtonClicked(sender, new EventArgs()); 
     this.Close(); 
    } 
} 

Jetzt in Form1 auf das Ereignis abonnieren und rufen change_lbl()

private void btn_gofrm2_Click(object sender, EventArgs e) 
{ 
    Form2 frm2 = new Form2(); 
    frm2.ButtonClicked += (se,ev) => change_lbl(); 
    frm2.Show(); 
} 
+0

danke Hari Prasad .dies hilft mir, aber wenn ich in upvote klicke. 0 für einen Moment konvertiert zu 1, aber es stellte sich heraus, dass es wieder eine 0 ist :(. Was mache ich jetzt –

+0

Ich schätze, Sie haben nicht genug Reputation für die Abstimmung :-). Sie konnten nur als Antwort markieren. –

+0

Down-Stimmen bitte fügen Sie den Kommentar hinzu. –

1

Ich würde vorschlagen, Sie bei diesem Projekt einen Blick zu nehmen. Dies könnte Ihr Problem lösen. Grundsätzlich, wenn Sie Form2 aufrufen und auf eine Schaltfläche klicken (ich meine eine Form2-Schaltfläche) dann muss Form1 das Ereignis "erfassen", d. H. Ein Ereignis wie Form2buttonClicked. Werfen Sie einen Blick auf diesen Artikel, um mehr zu erfahren. richtig http://www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms

Dies könnte ein wenig irrelevant sein, aber dies könnte man genauso gut http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

+0

danke "K.G aka" das helfe mir –

+0

wenn ich in upvote klicke. 0 für einen Moment konvertieren zu 1, aber es stellte sich wieder eine 0 sein :( –

+1

Ich bin neu hier. Die Abstimmung Ding ist wirklich demoralisierend :(. Bitte versuchen Sie es erneut, wenn Sie davon profitieren: v LOL. Und ich bin froh, dass es dein Problem gelöst hat W01FSbane :) –

Verwandte Themen