-3

这个问题可能已经回答了,我可能在 google 中输入了错误的问题,但我想运行time_refreshform1 上的函数,并且在 form2 上运行良好。这是我到目前为止得到的:

表格1

public void time_refresh()
    {
        run_stop.Text = Properties.Settings.Default.s_update + " " + Properties.Settings.Default.s_update_int;
        run_stop.ForeColor = Color.Green;
    }

表格2

private Main_form_1 form1 = null;

form1.time_refresh();

但它得到一个错误

你调用的对象是空的。对 c# 来说有点新,所以任何帮助都会非常好。

4

5 回答 5

0

你得到那个错误是因为你没有赋值form1

例如,您可以在以下位置创建属性form2

public Main_form_1 Form1 { get { return form1; } set { form1 = value; } }

form1并从form2初始化分配它:

// code from some form1 method
var form2 = new form2();
form2.Form1 = this;
form2.Show();
于 2012-12-20T16:11:19.917 回答
0

您应该初始化form1Form2 中的变量。
照原样,它是 Main_form_1 类型的变量,具有空值(意味着它没有分配给 Main_form_1 的任何有效实例)

最明显的方法是在Main_form_1创建 Form2 的实例时传递当前的实例。
例如,在当前Main_form_1您创建 Form2 的实例。
此时你传递了当前 Main_form_1 的引用

 Form2 f = new Form2(this);

并在 Form2 的构造函数中

public Form2(Main_form_1 f)
{
   form1 = f;
}

现在您的 Form2 实例对运行有正确的引用,并且可以在 Main_form_1 的正确实例上Main_form_1调用该方法time_refresh()

于 2012-12-20T16:11:30.333 回答
0

解决这个问题的正确方法是通过事件。 Form2不应该Form1直接访问,它应该只是通知Form1它需要通过事件更新自己。

Form2创建一些事件时:

public Action event Refresh; //TODO rename as appropriate

然后,只要您想知道它需要刷新自己,就Form2可以触发该事件:Form1

public void OnRefresh()  //call this method to fire the event
{
    if(Refresh != null)
        Refresh();
}

然后Form1你可以附加一个事件处理程序:

Form2 other = new Form2();
other.Refresh += () => time_refresh();
other.Show();
于 2012-12-20T16:21:02.053 回答
0

您可能希望在表单 2 的构造函数中设置使用的 form1 实例

private Form1 _currentForm1;
Public Form2(Form1 currentForm1)
{
    _currentForm1 = currentForm1;
}

并在您的 Form1 中(例如在构造函数中)

private Form1 _thisForm1;
public Form1()
{
    _thisForm1 = this;
}

//in your method simply say
Form2 form2 = new Form2(_thisForm1)

这将允许您在表单 2 代码中使用来自 form1 的公共方法。虽然没有实例化新 form1 的问题,因为它不会是向用户显示的表单。

于 2012-12-20T16:13:24.267 回答
-1

您必须实例化 Form1 的新实例。尝试像这样声明它:

private Main_form_1 form1 = new Main_form_1();

然后你可以打电话form1.time_refresh();

此外,您可以做的是让您的 Form2 需要 Form1 的实例。

public Main_form_1 _form1; // global variable
public Form2(Main_form_1 form1)
{
     _form1 = form1;
}

从那里你可以调用函数,它应该会影响你的原始表单。

于 2012-12-20T16:09:38.757 回答