从另一种形式

时间:2015-11-27 23:26:09

标签: c# winforms

我正在同时运行两个表单,并且我尝试通过Form1中的事件调用Form1方法来调整Form2的大小。使用以下代码,控制台中将显示正确的大小值,但Form1的大小不会更改。我尝试了很多方法,但我不知道为什么这不起作用。

在Form1中:

public void ResizeForm()
{
    Console.WriteLine(this.Size.ToString());
    this.Size = new System.Drawing.Size(600, 300);
}

在Form2中:

private void ResizeCheckbox_CheckedChanged(object sender, EventArgs e)
{
    Form1 form = new Form1();
    form.ResizeForm();
}

2 个答案:

答案 0 :(得分:1)

Form1 form = new Form1();创建一个新表单,调整其大小,然后忘记它。所以,这完全没有意义。 ResizeForm()方法确实被调用,但是在Form1的错误实例上。根据您的描述,您应该在某处实现Form1的其他实例,即您实际向用户显示的实例。您需要从Form2内访问该实例。如果您无法从Form1内访问Form2的正确实例,则必须以某种方式传递它,以便Form2拥有它。创建Form1的新实例不会调整Form1的原始实例的大小。

答案 1 :(得分:1)

您应该将当前Form1的实例传递给第二个表单。在Form2中添加一个实例,然后从Form1

获取该实例

窗体2

Form1 _form1;

public Form2(Form1 form1)
 {
  InitializeComponent();
   _form1 = form1;
 }

private void ResizeCheckbox_CheckedChanged(object sender, EventArgs e)
{
    _form1.ResizeForm();            
}

然后在主窗体中打开Form2

Form2 form2 = new Form2();
form2.Show((Form1)this); //I'm not sure if you need to cast "this" to From1