3 Stimmen

Wie kann ich etwas in einem Formular1 von einer Dialogbox aus ändern?

Angenommen, ich habe zwei Formulare (Formular1 und Formular2).

  • Form1 hat eine PictureBox
  • Form2 I hat einen OpenFileDialog

Form1 ist das Hauptformular, und wenn ich das Projekt ausführe, sehe ich Form1.

Wie kann ich das Bild in der PictureBox in Form1 von Form2 aus ändern?

2voto

Fourth Punkte 8986

Wie übergebe ich einen Wert von einem untergeordneten Formular zurück an das übergeordnete Formular?

Geben Sie den Wert, der im Dialogfeld "Datei öffnen" zurückgegeben wird, mit einer Eigenschaft an und lassen Sie das übergeordnete Formular diesen Wert übernehmen.

2voto

Alex Aza Punkte 73463

Übergeben Sie ein Formular als Parameter an einen Konstruktor des zweiten Formulars oder fügen Sie eine Methode hinzu, die die Referenz übergibt. Nachdem Sie den Verweis auf Ihr Formular haben, können Sie mit dem Formular von tun, was Sie wollen.

Ob Sie den Bilderrahmen als öffentliches Mitglied freigeben, bleibt Ihnen überlassen. Ich würde jedoch vorschlagen, eine öffentliche Methode zu erstellen SetImage() in der ersten Form. Die zweite Form würde aufrufen form1.SetImage() .

[Update]

Warten Sie, warum Sie brauchen, um Bild von OpenFileDialog zu setzen, müssen Sie nur empfangen fileName aus dem Dialog, und dann öffnen Sie die Datei und laden in das Formular.

Zum Beispiel so:

private void button1_Click(object sender, EventArgs e)
{
    using (var dialog = new OpenFileDialog())
    {
        var result = dialog.ShowDialog();
        if (result != DialogResult.OK)
            return;
        pictureBox1.Image = Image.FromFile(dialog.FileName);
    }
}

Dies ist der Code innerhalb von Form1.

[Update]

Hier ist die Grundidee, wie man von einem Formular auf ein anderes zugreifen kann.

public class MyForm1 : Form
{
    public MyForm1()
    {
        InitializeComponent();
    }

    public void SetImage(Image image)
    {
        pictureBox1.Image = image;
    }

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

public class MyForm2 : Form
{
    private MyForm1 form1;

    public MyForm2()
    {
        InitializeComponent();
    }

    public MyForm2(MyForm1 form1)
    {
        this.form1 = form1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form1.SetImage(yourImage);
    }
}

2voto

Peyman Punkte 3020

In der Datei Program.cs können Sie einen beliebigen Wert setzen, entweder FormOptions für die Instanz des Formulars .

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var frm = new Form1();
        // Add the code to set the picturebox image url
        Application.Run(frm);
    }

Außerdem können Sie den Konstruktor zu Form1 hinzufügen und den Parameter über den Konstruktor übergeben.

1voto

orangemoney52 Punkte 126

Idealerweise strukturieren Sie Ihren Code in einer ModelViewController Muster. Dann haben Sie in Ihrem Modell einfach einen Verweis auf das Bild im Bildrahmen. Bei der Interaktion mit dem OpenFileDialog in Form2 würden Sie Ihre Modelladapterschnittstellen aufrufen, die in die Ansichten (Form1 und Form2) eingebunden sind, um das im Modell gespeicherte Bild zu ändern. Kurz gesagt, Sie brauchen einen Callback von der Ansicht zum Modell. Wenn Sie Ihren Code nicht umgestalten wollen, um MVC zu sein, haben Sie einfach ein gemeinsames Objekt, das die Bildreferenz enthält, die sowohl Form1 als auch Form2 in ihren Konstruktoren erhalten, so dass sie es beide ändern können.

1voto

Alexander Punkte 1232

Sie können dies ganz einfach tun. Ändern Sie zunächst Ihren Code (in Form1), der Form2 anzeigt, so dass er wie folgt aussieht:

<variable-of-type-Form2>.ShowDialog(this);

oder wenn Sie nicht wollen, dass form2 modal ist

<variable-of-type-Form2>.Show(this);

Wenn Sie nun den Pfad zum Bild haben, können Sie auf die pictureBox wie folgt zugreifen

((PictureBox)this.Owner.Controls["pictureBox1"]).Image=Image.FromFile(<filename>);

Angenommen, Sie haben eine PictureBox auf Formular1 mit dem Namen "pictureBox1".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X