我有一个问题,我想弄明白。
在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
。但是在这两个{{1}}之间没有任何事情发生。知道我做错了什么吗?
我希望这个问题是合理的,因为我的英语很差,而且我甚至不理解我的问题。
答案 0 :(得分:6)
在这一行:
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
}
答案 1 :(得分:1)
正如Rik指出的那样,你丢弃了你创建的新表单,所以没有任何反应,至少你没有看到它,如果你尝试这样的话:
using (var form2 = new Form2())
{
form2.method2("aaa");
form2.ShowDialog();
}
你可以看到变化。
答案 2 :(得分:0)
你能尝试下面的代码,你设置的是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);