不是方法中的所有代码都被执行

本文关键字:代码 执行 方法 | 更新日期: 2023-09-27 17:50:19

我有一个问题,我想弄清楚。

Form1中,我尝试运行Form2中的一些方法。

的例子:

形式1:

 `Form2.SomeMethod(name);`

形式2

这是我从Form1中调用的一个方法,在这个方法中我调用了其他应该做某事的方法。

public static void SomeMethod(string name)
{
     new Form2().method2(name);
}

这个方法没有正常工作

public void method2(string naziv)
{
     MessageBox.Show("test? "+naziv); //only for test. This works
     Button x = new Button();
     x.Margin = new Thickness(50, 20, 0, 0);
     x.VerticalAlignment = VerticalAlignment.Top;
     x.HorizontalAlignment = HorizontalAlignment.Left;
     x.MinHeight = 50;
     x.MinWidth = 100;
     x.MaxWidth = 150;
     x.FontSize = 20;
     x.Content = naziv;
     x.Name = "naziv";
     gridmiza.Children.Add(x);
     lbltest1.Content = "test? "+naziv; //only for test
     MessageBox.Show("test2?"); //only for test and this also works works
}

我的问题是隐藏在两个MessageBox之间。首先执行MessageBox,然后执行最后一个。但是在这两个MessageBox之间什么也没有发生。知道我哪里做错了吗?我希望这个问题是合理的,因为我的英语不好,而且我甚至不明白我的问题

不是方法中的所有代码都被执行

这一行:

new Form2().method2(name);

您正在创建一个新的Form2实例,调用该方法,然后立即丢弃该实例,因为您没有将其分配给任何东西。这可能不是你想要做的。我猜你要么想在现有实例上调用该方法,创建一个新实例并从该方法返回它。

我猜你已经在某个地方创建了Form2的实例。您应该调用该实例的方法,要么通过传入该实例,要么通过删除static并使用Form1的实例成员:

public static void SomeMethod(Form2 form, string name)
{
     form.method2(name);
}

或:

public void SomeMethod(string name)
{
     form2.method2(name); // assuming Form1 has a member for Form2
}

正如Rik指出的那样,您丢弃了创建的新表单,因此没有发生任何事情,至少您没有看到它,如果您尝试这样做:

using (var form2 = new Form2())
{
    form2.method2("aaa");
    form2.ShowDialog();
}

可以看到变化

你可以试试下面的代码,你正在设置MaxWidth/Height和MinWidth/Height,但不是实际的高度和with,所以按钮将不可见。

public void method2(string naziv)
{
    MessageBox.Show("test? "+naziv); //only for test. This works
    Button x = new Button();
    x.Margin = new Thickness(50, 20, 0, 0);
    x.VerticalAlignment = VerticalAlignment.Top;
    x.HorizontalAlignment = HorizontalAlignment.Left;
    x.Height = 50;
    x.Width = 100;
    x.FontSize = 20;
    x.Content = naziv;
    x.Name = "naziv";
    gridmiza.Children.Add(x);
    lbltest1.Content = "test? "+naziv; //only for test
    MessageBox.Show("test2?"); //only for test and this also works works
}

和不该:

new Form2().method2(name);

不是:

Form2 f2 = new Form2();
f2.method2(name);