如何对第二表单执行主表单按钮功能
本文关键字:表单 执行 按钮 功能 | 更新日期: 2023-09-27 18:12:12
我有一个主要形式的按钮,当单击时启动相机的函数,我希望该开始函数也以第二种形式执行,该函数包含条件语句if和else。通常我做一个public void Name
,然后把函数放进去,然后我做一个第二种形式的构造函数来调用那个函数,但是这次不起作用。反过来呢?
public void startProg()
{
if (start.Text == "&Start")
{
if (DeviceExist)
{
videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
CloseVideoSource();
videoSource.DesiredFrameSize = new Size(1366, 768);
//videoSource.DesiredFrameRate = 10;
videoSource.Start();
lblCam.Text = "Device running...";
start.Text = "&Stop";
}
else
{
lblCam.Text = "Error: No Device selected.";
}
}
else
{
if (videoSource.IsRunning)
{
CloseVideoSource();
lblCam.Text = "Device stopped.";
start.Text = "&Start";
}
}
}
private void start_Click(object sender, EventArgs e)
{
startProg();
}
第二种形式
private void Close(object sender, FormClosingEventArgs e)
{
frmMain main = new frmMain();
main.startProg();
}
虽然您没有指出为什么它"不起作用"或它是如何失败的,但我建议在第一个表单订阅的第二个表单中创建一个事件(参见事件教程)。在第二个表单中触发事件后,第一个表单就可以执行与按下按钮时相同的操作。
在我看来,你只需要一个static
类和方法来做到这一点-我确信这不是需要状态的东西,所以把实际的API调用放在这样的类中启动相机:
public static class Camera
{
public static void Start() { ... }
}
,然后像这样调用:
Camera.Start();
您可以通过传递方法将相机从form1启动到form2来实现这一点。
我举了一个非常简单的例子。
第一个表单的代码是:public Form1()
{
InitializeComponent();
this.button1.Click += delegate { ShowMessageBoxFromForm1(); };
this.button2.Click += delegate
{
Form2 form2 = new Form2(ShowMessageBoxFromForm1);
form2.ShowDialog();
};
}
private void ShowMessageBoxFromForm1()
{
MessageBox.Show("I'm in Form1");
}
表单上只有两个按钮。
第二个表单(Form2)的代码是:public partial class Form2 : Form
{
private readonly Action action;
public Form2(Action action)
{
InitializeComponent();
this.action = action;
}
private void button1_Click(object sender, EventArgs e)
{
this.action.Invoke();
}
}
上面只有一个按钮
如果你想在多个表单上使用某些函数,你应该在单独的类中编写函数。使用该类的对象,您应该调用该函数。
但如果您仍想按照您的方式继续,请尝试执行
创建创建StartCamera()方法的第一个Form对象。确保StartCamera()方法是公共的。现在是第二种形式:
Form1 frmObj=new Form1();
frmObj.StartCamera();