c#在form2上的form1上运行函数

时间:2012-12-20 16:07:58

标签: c# .net winforms forms function

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

Form1中

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#有点新意,所以任何帮助都会很棒。

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

您应该初始化Form2中的变量form1 它是一个Main_form_1类型的变量,具有空值(意味着它没有分配给Main_form_1的任何有效实例)

最明显的方法是在创建Form2实例时传递当前Main_form_1的实例。
例如,在当前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()方法

答案 2 :(得分: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,因为它不会成为向用户显示的表单。

答案 3 :(得分: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();

答案 4 :(得分:-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;
}

从那里你可以调用这些函数,它应该影响你的原始形式。