不是方法中的所有代码都被执行
本文关键字:代码 执行 方法 | 更新日期: 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);