2013-05-03 1 views
0

나는 클릭 할 때 카메라를 시작하는 메인 폼의 버튼에 함수를 가지고 있는데, 그 함수가 조건문 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

코드 pleasssseee : – christopher

+0

나는 질문이 좀 불분명하기 때문에 예 코드가 – user2262382

+0

C#을 창을 사용하고 있음을 언급하는 것을 잊었다 하고 무엇을하고 싶은가요? – Steve

답변

1

그것은 단순히 내가 확신 상태를 필요로 뭔가 아니다 - 그것은이 작업을 수행하기 위해 static 클래스와 메소드를 필요로 나에게 보인다, 그래서 실제 API 호출을 배치 이 같은 클래스의 카메라를 시작하려면 다음

public static class Camera 
{ 
    public static void Start() { ... } 
} 

과 같이 호출 :

Camera.Start(); 

두 형식 모두입니다.

+0

하지만 comboBox에는 정적 클래스가 필요하지 않으므로 comboBox가 있고 정적 클래스는 작동하지 않습니다. – user2262382

+0

@ user2262382, 카메라를 바로 시작한다고 했습니까?카메라를 시작하는 코드를 정적 클래스에 넣습니다. 이것이 당신이하는 일이 아니라면 ** 명확히해야합니다 ** 카메라를 시작하는이 방법을 어디서나 호출 할 수 있습니다. 버튼 이벤트 일지라도 상관 없습니다 콤보 상자 이벤트. –

2

"작동하지 않는 이유"또는 실패하는 방법을 언급하지는 않았지만 첫 번째 양식이 구독하는 두 번째 형식으로 이벤트를 만드는 것이 좋습니다 (Events Tutorial 참조). 두 번째 양식에서 이벤트를 시작하자마자 첫 번째 양식은 단추를 눌렀을 때와 똑같은 동작을 실행할 수 있습니다.

0

메서드를 전달하여 form1에서 camera2로 카메라를 시작하면됩니다.

나는 아주 간단한 예제를 만들었습니다.

첫 번째 양식에 대한 코드는 다음 Form1에 두 개의 버튼이 있습니다

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"); 
} 

.

두 번째 양식 (형식 2)에 대한 코드는 다음과 같습니다

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(); 
    } 
} 

거기에 하나의 버튼이있다.

0

여러 폼에서 일부 기능을 사용하려면 별도의 클래스에 함수를 작성해야합니다. 그리고 그 클래스의 객체를 사용하여 함수를 호출해야합니다.

그러나 당신은 여전히 ​​당신의 방법에 의해 진행하려면,

이 StartCamera() 메소드가 작성되는 1 차 형태의 객체를 생성 다음 해보십시오. StartCamera() 메서드가 public인지 확인하십시오. 이제 두 번째 양식 :

Form1 frmObj=new Form1(); 
frmObj.StartCamera(); 
관련 문제