如何在没有 static 和 new class(); 的情况下从 Form2 调用 Form1 的方法?

How to call Form 1's method from Form2 without static and new class();?

在没有static和new的情况下调整Form的大小时如何调用Form 1的方法class();像下面的代码。因为不止一个 new class();使用代码时会导致“System.WhosebugException”问题。它不采用它保存在 class 中的值,由于是静态的。

Form1 class代码:

Form2 frm2 = new Form2();
public void ResizePicture(int Height, int Width)
{
    frm2.pictureBox1.Height = Height;
    frm2.pictureBox1.Width = Width;
}

private void button1_Click(object sender, EventArgs e)
{
    frm2.pictureBox1.Image = Image.FromFile(@"C:\Users\Omer\Desktop\screenshot.png");
    frm2.Show();
}

Form2 class代码:

private void Form2_Resize(object sender, EventArgs e)
{
    ResizePicture(this.Height, this.Width);
}

您可以订阅其他形式的Resize活动

在表格 1 中:

private readonly Form2 frm2;

private Form1()
{
    InitializeComponent();

    frm2 = new Form2();
    frm2.Resize += Frm2_Resize;
}

private void Frm2_Resize(object sender, EventArgs e)
{
    ...
}

这段代码只在Form1的构造函数中创建了一次Form2。现在 Form2 的 Resize 事件处理程序在 Form1 中。


另一种可能性是将第一种形式的引用传递给第二种形式

在表格 2 中:

private readonly Form1 frm1;

private Form2(Form1 frm1)
{
    InitializeComponent();

    this.frm1 = frm1;
}

private void Form2_Resize(object sender, EventArgs e)
{
    frm1.ResizePicture(this.Height, this.Width);
    // Note: `ResizePicture` must be public but not static!
}

表格 1

frm2 = new Form2(this); // Pass a reference of Form1 to Form2.

另一个,将表格 1 传递给 Show() 本身:

private void button1_Click(object sender, EventArgs e)
{
    frm2.pictureBox1.Image = Image.FromFile(@"C:\Users\Omer\Desktop\screenshot.png");
    frm2.Show(this); // <-- passing Form1 here!
}

在表格 2 中,您将 .Owner 转换回表格 1:

private void Form2_Resize(object sender, EventArgs e)
{
    Form1 f1 = (Form1)this.Owner;
    f1.ResizePicture(this.Height, this.Width);
}