2013-05-03 3 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

Я забыл упомянуть, что я использую # окно C форму C# – user2262382

+0

Да код, потому что вопрос немного неясно – Steve

ответ

1

Мне кажется, вы просто нужен static класс и метод, чтобы сделать это -это не то, что требует состояние я уверен, поэтому поместить фактические вызовы API для запуска камеры в классе, как это:

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

, а затем вызвать его так:

Camera.Start(); 

с обеих форм.

+0

, но у меня есть comboBox и статический класс не работает, потому что comboBox не требует статического класса. – user2262382

+0

@ user2262382, ты сказал, что начинаешь с камеры?Поместите код, который запустит камеру в статический класс. Если это не то, что вы делаете, вам действительно нужно уточнить. ** См., Вы можете вызвать этот метод - который запускает камеру - из любого места, и поэтому не имеет значения, является ли это событие кнопки или событие со списком. –

2

Хотя вы не указали, почему он «не работает» или как он терпит неудачу, я бы рекомендовал создать событие во второй форме, на которую подписывается первая форма (см. Events Tutorial). Как только вы запускаете событие во второй форме, первая форма может выполнять те же действия, что и при нажатии кнопки.

0

Вы можете сделать это, передав метод для запуска камеры из формы1 в 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(); 
    } 
} 

Там только одна кнопка на нем.

0

Если вы хотите использовать некоторую функцию на нескольких формах, лучше написать функцию в отдельном классе. И используя объект этого класса, вы должны вызвать функцию.

Но если вы все еще хотите продолжить на вашем пути, попробуйте следующие

Создание объекта 1-й формы, на котором написан метод StartCamera(). Убедитесь, что метод StartCamera() является общедоступным. Теперь на второй форме:

Form1 frmObj=new Form1(); 
frmObj.StartCamera(); 
Смежные вопросы