Laden...

Events in anderer Form abfragen

Erstellt von Lizz4rd vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.257 Views
L
Lizz4rd Themenstarter:in
8 Beiträge seit 2017
vor 6 Jahren
Events in anderer Form abfragen

Hallo!
Ich glaube mein Problem ist ziemlich einfach zu lösen aber ich komme einfach nicht dahinter.
Ich habe 2 verschiedene Forms mit jeweils einem Button.
Jetzt möchte ich in Form 2 abfragen ob der Button in Form1 gedrückt ist.
Und umgekehrt in Form1 abfragen ob der Button in Form 2 gedrückt worden ist.

Vielen Dank schon einmal für die Hilfe

Grüße

L
Lizz4rd Themenstarter:in
8 Beiträge seit 2017
vor 6 Jahren

Erstmal danke für die Antwort.
Ich habe die FAQ bereits dazu gelesen aber ich komme immer nochnicht auf die Lösung.
Ich hab mir sämtlich Beispiele zu den Events angesehn aber ich verstehe noch immer nicht wie ich dieses Event in einer anderen Form abfrage.


public Form1()
        {
            Form2 f2 = new Form2();
            f2.Show();
        }
        public event EventHandler ButtonFirstFormClicked;
        public void button1_Click(object sender, EventArgs e)
        {
            if (ButtonFirstFormClicked != null)
            {
                ButtonFirstFormClicked(sender, e);
            }
        }
    }

Hier erstelle ich mein Event das den Klick auf den Button erkennen soll.
Aber wie kann es dann in der andereren Form aufgerufen werden.

J
251 Beiträge seit 2012
vor 6 Jahren

Nimm es mir nicht krum: Aber versuch mal den FAQ zu verstehen. Allein die Skizze im ersten Beitrag von herbivore wird deine Frage beantworten.
Bzw. erläutere, was du daran nicht verstehst.

78 Beiträge seit 2016
vor 6 Jahren

z.B. so gehts:

Aber Achtung! Das ist nur ne schnelle Lösung. 3 Schichten, WPF, MVVM... ist weiterhin eine gut Idee.


 public class MyForm : Form
    {
        public MyForm(MyViewModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            Button myButton = new Button();
            myButton.Location = new Point(20, 20);
            myButton.Text = "Click me!";
            myButton.Click += (sender, e) => { model.SomethingAmazingHappens(this.Text); };

            Label myLabel = new Label();
            myLabel.Location = new Point(20, 60);
            myLabel.Text = "---";

            model.SomeThingHappens += (sender, e) => { myLabel.Text = e.Text; };

            this.Controls.AddRange(new Control[] { myLabel, myButton });
        }
    }

    public class MyViewModel
    {
        private string myText = string.Empty;

        public event EventHandler<MyEventArgs> SomeThingHappens;

        public void SomethingAmazingHappens(string text)
        {
            this.OnSomethingAmazingHappens(text);
        }

        private void OnSomethingAmazingHappens(string text)
        {
            this.SomeThingHappens?.Invoke(this, new MyEventArgs(text));
        }
    }

    public class MyEventArgs : EventArgs
    {
        public MyEventArgs(string text)
        {
            this.Text = text;
        }

        public string Text { get; set; }
    }

Aufrufen kannst du das mit:


            MyViewModel model = new MyViewModel();

            var f1 = new MyForm(model);
            f1.Text = "My Form 1";

            var f2 = new MyForm(model);
            f2.Text = "My Form 2";

            f1.Show();
            f2.Show();

http://dotnet-paderborn.azurewebsites.net/

L
Lizz4rd Themenstarter:in
8 Beiträge seit 2017
vor 6 Jahren

Nimm es mir nicht krum: Aber versuch mal den FAQ zu verstehen. Allein die Skizze im ersten Beitrag von herbivore wird deine Frage beantworten.
Bzw. erläutere, was du daran nicht verstehst.

Wir sind zwei Dinge nicht klar.
Erstens:
Muss ich damit die Kommunikation funktioniert in meiner Form1 eine neue Form erstellen oder genügt es wenn ich bei meinem Projekt eine neue Form hinzufüge.
Ich dachte ich füge eine zweite Form im Projekt hinzu da sich ja Form1 und Form2 laut FAQ nicht kennen sollen.
Zweitens:
Ich habe in meiner Form1 jetzt abgefragt ob ich den Button gedrückt habe und das auf ein Event übertragen.Dieses Event ist public. Warum ist es mir nicht möglich in Form2 auf das Event das public ist zuzugreifen?

Edit habs schon geschaft nur is dieser Code auch praktisch?
Form1:


public partial class Form1 : Form
    {
        public delegate void ButtonClicked(object sender, EventArgs r);
        public static event ButtonClicked firstbtn;

        public Form1()
        {
            InitializeComponent();
            Form2 f2 = new Form2();
            f2.Show();

        }
        public void button1_Click(object sender, EventArgs e)
        {
            firstbtn(sender, e);
        }
    }

Form2:

public partial class Form2 : Form
    {

        public Form2()
        {
            InitializeComponent();
            Form1.firstbtn += btn1_Click;
        }
        void btn1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }
    }
16.842 Beiträge seit 2008
vor 6 Jahren

Es muss eine Referenz vorhanden sein, auf die Du zugreifen kannst, damit eine Kommunikation funktioniert.
Die Form muss nicht zwangsläufig nicht neu erzeugt werden, solange Du die Referenz kennst.