并非所有方法中的代码都已执行

时间:2014-03-14 11:18:26

标签: c# methods

我有一个问题,我想弄明白。

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}}之间没有任何事情发生。知道我做错了什么吗? 我希望这个问题是合理的,因为我的英语很差,而且我甚至不理解我的问题。

3 个答案:

答案 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);