Non genera evento su un panel con video...

di il
6 risposte

Non genera evento su un panel con video...

Ciao, ho un form dove nel suo interno visualizzo un video.wmv, utilizzando da libreria AudioVideoPlayback di Directx, ma ho un problema....
non riesco a collegare un evento al mio form;
Questo è il codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;

namespace videoform
{
    public partial class Form1 : Form
    {
        Video outvideo;
        public Form1()
        {
            InitializeComponent();

            
            outvideo = new Video("c://myvideo.wmv");

            outvideo.Owner = panel1;
            outvideo.Owner.Click += new EventHandler(Owner_Click)
            outvideo.Play();
        }

        void Owner_Click(object sender, EventArgs e)
        {
            MessageBox.Show("EVENTO!!");
        }
    }
}
nella riga:
outvideo.Owner.Click += new EventHandler(Owner_Click);
creo la funzione che gestisce l'evento click, ma esso nn viene generato

Perchè?
Dove sbaglio?

6 Risposte

  • Re: Non genera evento su un panel con video...

    IMHO, devi usare i thread! (namespace System.Threading).

    Scrivi il codice per visualizzare il video in un thread che lanci allo scatenarsi dell' evento che preferisci, il codice che vuoi venga eseguito al click del bottone lo scrivi in un altro thread e nel gestore di evento click del bottone semplicemente lo richiami.

    ciao
  • Re: Non genera evento su un panel con video...

    Grazie x l'aiuto, ma é da poco che sono in c#, mi daresti un esempio di codice?
  • Re: Non genera evento su un panel con video...

    Ti faccio un esempio approssimativo e ti lascio il gusto di renderlo operativo per la tua applicazione:
    
    using System;
    using System.Windows.Forms;
    using System.Threading;
    
    public partial class MainForm : Form
    {
        string strUri;
    
        Thread video;
        Thread click;
    
        public MainForm()
        {
            InitializeComponent();
        }
    
        private void MainForm_Load(object sender, EventArgs e)
        {
            strUri = "c://myvideo.wmv";
    
            // Lanci il thread del video al load del form
            video = new Thread(delegate() { videoThread(strUri); });
            video.IsBackground = true;
            video.Start();
        }
    
        // questo è il metodo che viene eseguito quando lanci il thread del video
        public void videoThread(string uri)
        {
            // codice che mostra video
        }
    
        // questo è il thrad del bottone
        public void clickThread()
        {
            // tuo codice
        }
    
        // qui lanci il thread del bottone che hai definito su
        private void button1_Click(object sender, EventArgs e)
        {
            click = new Thread(delegate() { clickThread(); });
            click.IsBackground = true;
            click.Start();
        }
    }
    
    ciao
  • Re: Non genera evento su un panel con video...

    Ecco ho fatto così:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.DirectX.AudioVideoPlayback;
    using System.Media;
    using System.Threading;
    
    namespace videoform
    {
        public partial class Form1 : Form
        {
            Thread video;
            Thread click;
            Video outvideo;
            
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                video= new Thread(delegate() {Aprivideo();});
                video.IsBackground=true;
                video.Start();
            }
    
            public void Aprivideo()
            {
                outvideo = new Video("c:\\myvideo.wmv");
            }
    
            public void clickThread()
            {
                outvideo.Play();            
            }
    
            private void Form1_Click(object sender, EventArgs e)
            {
                click = new Thread(delegate() { clickThread(); });
                click.IsBackground = true;
                click.Start();
                outvideo.Owner=this;
            }
         }
    }
    
    Provo..... clicco sul form1, il video parte....... ma da qui in poi se ripremo sul form1, nn ottengo più l'evento!!!Il solito problema,

    Dov'è che ho sbagliato??
    Mi manca ancora la funzione

    Mi dai una mano.....
  • Re: Non genera evento su un panel con video...

    Certo che te la do una mano se ci riesco, volentieri

    non so se ho capito bene, nel caso che abbia frainteso, spiegami meglio, che cerchiamo di risolvere.

    Forse che non ti servono neanche i threads!

    1) fai una applicazione win form;
    2) aggiungi un controllo Panel ( di nome panel1);
    3) aggiungi un controllo Button ( di nome button1);
    4) collega l' evento del bottone al form e....

    è forse questo quello che vuoi fare ?
    
    using System;
    using System.Windows.Forms;
    using Microsoft.DirectX;
    using Microsoft.DirectX.AudioVideoPlayback;
    
    namespace videoform
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Video outvideo = new Video("c:\\myvideo.wmv");
                outvideo.Owner = panel1;
                outvideo.Play();
                
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("ciao");
            }
        }
    }
    
    naturalmente al tuo progetto devi aggiundere i riferimenti alle .dll Microsoft.DirectX e Microsoft.DirectX.AudioVideoPlayback

    prova e fammi sapere

    p.s. se non stai usando visual studio o sharp develop o come si chiama o qualsiasi altro strumento di sviluppo integrato:

    - l' evento click al form si collega così:
    
    button1.Click += new EventHandler(button1_Click);
    
    e aggiungilo qui:
    
            public Form1()
            {
                InitializeComponent();
                button1.Click += new EventHandler(button1_Click); // qui colleghi evento
            }
    
    se invece che sul botone vuoi cliccare sul form, si fa uguale, cambi solo il nome.

    Fammi sapere!

    buonanotte
  • Re: Non genera evento su un panel con video...

    Cavolo quanto 6 disponibile..... hai scritto tutta sta roba stanotte!!
    In parte quello che hai scritto è quello che voglio, ma il punto è questo:
    se invece che sul botone vuoi cliccare sul form, si fa uguale, cambi solo il nome.
    Immagina un video di youtube..... devo fare in modo che una volta avviato il video nel mio form, il quale non ha nessun button, possa, cliccando sul form (o sul video, dipende dal punto di vista), questo, il video, si interrompa, o riprenda se era già interrotto.
    Ho provato i tuoi esempi, ma sembrerebbe che il video, gestito dalla libreria Directx, una volta che viene agganciato al form, e avviato, non riesca più a ricevere nessun evento;
    Tu hai provato i tuoi esempi?
Devi accedere o registrarti per scrivere nel forum
6 risposte