2011-09-29 139 views
1

我有一个表单(AddNewCamper),它包含一个文本框和一个提交按钮。以不同的形式,我试图写:调用按钮单击事件方法

if (submit button is clicked) 
    do stuff 

在该按钮实际位于的窗口中,我创建了一个单击事件。所以我想我试图调用if语句内的click事件(它位于与click事件所在位置不同的窗口中)。

这是我有:

AddNewCamper camp = new AddNewCamper(); 
camp.Show(); 

// This is where I'm confused. How do I say if this button is clicked, 
// or how do i call its click event that's located in AddNewCamper? 
if (camp.btnNewSubmit_Click_1()) 
{ 
    Camper person = new Camper(camp.txtNewFirstName.Text); 
    camp.txtNewFirstName.Text = person.getName(); 
    c.testListBox.Items.Add(person.getName()); 
    campersFrame.Content = c; 
} 
+0

好吧,如果你创建了一个按钮,然后双击该按钮,它会带你到代码视图,以便您可以在一些代码编写为你想要点击按钮时发生的事情。在我的项目中的另一个地方,我试图编写“如果该按钮被点击”所以在我的if(上面的语句)中,我试图说如果用户单击该按钮。 Idk如何编写if(语句)。对不起,我只是不知道该怎么问。 – TMan

+0

你是说你只是想直接调用'AddNewCamper.btnNewSubmit_Click_1()',是不是? – Kev

+0

为什么不把你的代码放在AddNewCamper的'AddNewCamper.btnNewSubmit_Click_1()'事件处理程序中? – Kev

回答

1

据我了解你的问题,似乎你想要显示在父窗体中的一些内容时提交按钮单击AddNewCamper窗体。以下是您可以做到的一种方式。

将一个公共方法添加到ParentForm中以显示(或刷新)一次提交从AddNewCamper单击的内容。

在ParentForm

public RefreshCamper(string firstName) 
{ 
    Camper person = new Camper(camp.txtNewFirstName.Text); 
    camp.txtNewFirstName.Text = person.getName(); 
    c.testListBox.Items.Add(person.getName()); 
    campersFrame.Content = c; 
    // ETC... 
} 

传递ParentForm实例的形式AddNewCamper在构造器。

private ParentForm _parentForm; 

public AddNewCamper(ParentForm parentForm) 
{ 
    _parentForm = parentForm; 
} 

private void btnNewSubmit_Click_1() 
{ 
    _parentForm.RefreshCamper(txtNewFirstName.Text); 
} 

从ParentForm中创建一个AddNewCamper实例,如下所示。

AddNewCamper camp = new AddNewCamper(this); 
camp.Show(); // Or ShowDialog if you want Model.. 

或者您可以用同样的方式在ParentForm中设置一个标志来标识提交按钮被单击。

+0

嘿谢谢你给我看这个。我相信我很接近,但是当我点击提交时,程序就爆炸了。大声笑它开始调试,并立即指向你有什么在btnNewSubmit_Click1()方法。我不确定为什么 – TMan

+0

它表示NullReferenceException未被用户代码取代。 – TMan

+0

未将对象引用设置为对象的实例。 – TMan

0

转到按钮的事件处理程序(在Visual Studio中的表单视图,在属性网格发现包装盒上的点击事件,双击在它旁边,这会把你带到它[或者如果它还没有被创建,就创建它])从这里开始,你需要调用你想在用户按下按钮时要做的方法。看看你提供的代码,我假设你想要做的是等待if语句,直到用户按下按钮为止。不幸的是,除非此代码位于单独的线程中,否则如果您要等待用户按下按钮,程序将挂起。相反,你必须弄清楚当用户按下按钮时你想要发生什么,把它放在一个方法中,并让按钮事件处理程序调用该方法。

0

当你有“营”的形式显示,通过这样父窗体的引用:

camp.Show(this); 

然后,当有人点击了“营”形式的提交按钮,你可以参考一下使用所有者变量,做你想做的事情,形式类似这样的父窗体:

((ParentForm)owner).SomeMethod(parametersToPassToParentForm); 
+0

是的,这是我之前想要做的。我很困惑所有者变量是什么? – TMan

+0

它是一个变量(类型对象),在您的ParentForm继承的基类Form中,因为它是一个对象类型变量,所以您需要按顺序将它转换回ParentForm类型使用它当你用camp.Show(this)显示另一个表单时,“this”会传递一个对你存储在变量所有者中的ParentForm的引用。 –