我在主窗体的按钮中有一个功能,点击时启动摄像头,我希望启动功能也以第二种形式执行,该函数包含条件语句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();
}
答案 0 :(得分:2)
虽然你没有指出为什么它“不起作用”或它是如何失败的,但我建议用第一种形式订阅的第二种形式创建一个事件(参见Events Tutorial)。 只要您以第二种形式触发事件,第一个表单就可以执行与按下按钮时相同的操作。
答案 1 :(得分:1)
在我看来,你只需要一个static
类和方法来执行此操作 - 这不是需要状态的东西我确定,所以放置实际的API调用以在这样的类中启动相机:
public static class Camera
{
public static void Start() { ... }
}
然后像这样调用它:
Camera.Start();
来自两种形式。
答案 2 :(得分:0)
您可以通过传递方法将相机从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");
}
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();
}
}
它上面只有一个按钮。
答案 3 :(得分:0)
如果要在多个表单上使用某些函数,则应该在单独的类中编写函数。使用该类的对象,您应该调用该函数。
但如果您仍想按照自己的方式行事,请尝试按照
进行操作创建写入StartCamera()方法的1st Form的对象。确保StartCamera()方法是公共的。现在是第二种形式:
Form1 frmObj=new Form1();
frmObj.StartCamera();