Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich ein Event in einer Form in einer anderen Form verfügbar machen?
Timme
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Wie kann ich ein Event in einer Form in einer anderen Form verfügbar machen?

beantworten | zitieren | melden

Moin, ich bin noch ganz frisch in c# .

Ich nutze VisualStudio 2019 als IDE falls das relavant werden sollte.

zum Problem:

Ich erstelle, in einer zweiten Form, ein "MediaPlayer" Object mit Hilfe der LibVLCSharp.Shared.
Das "MediaPlayer" Object hat mehrere Events die ich in der ersten Form auslösen möchte
z.B. für ne Progressbar , Timeleft anzeige.

das Event in der zweiten Form kann ich problemlos registrieren aber ich hab keine Schimmer wie ich ihn in der ersten Form Verfügbar mache.

Beide Forms sollen übrigends über die komplette Laufzeit erhalten bleiben.

hoffe ich hab das Thema hier Richtig erstellt

LG Timme


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
using System.IO;
using LibVLCSharp.Shared;
using Xamarin.Forms;


namespace SG
{
    public partial class MainGui : Form
    {
        
       public MainView newMainView = new MainView();



        private LibVLC _libVLC;
        public MainGui()
        {
            InitializeComponent();
            
            CheckMonitors();




        }


        private void CheckMonitors()
        {
            

            int MonitorCount = System.Windows.Forms.SystemInformation.MonitorCount;
            if (MonitorCount ≤ 1)
            {
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                string caption = "Monitore";
                MessageBox.Show("Es wurde nur ein Monitor gefunden, sie bedindet sich im     Konfigurations Modus!",caption, buttons);
            }
            else
            {

                Screen[] screens = Screen.AllScreens;
                newMainView = new MainView();
                newMainView.Show();
                newMainView.Location = Screen.AllScreens[1].WorkingArea.Location;
                newMainView.WindowState = FormWindowState.Maximized;
                
                
                //newMainView.TopMost = true;



            }
        }

        private void sendText_Click(object sender, EventArgs e)
        {
            
            newMainView.Start_Content(@"F:\Movies\test.mkv", true);
            

        }

        private void StopVideo_Click(object sender, EventArgs e)
        {
            newMainView.Stop_Playback();
            this.progressBar1.Value =  0;
        }


    }

}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LibVLCSharp.Shared;

namespace SG
{
    public partial class MainView: Form
    {
        private LibVLC _libVLC;
        private MediaPlayer _mp;



        public MainView()
        {

            Core.Initialize();
           InitializeComponent();
        }



        



        public void Start_Content(string DateiPfad,bool isMuted= true )
        {
            _libVLC = new LibVLC();
            _mp = new MediaPlayer(_libVLC);
            videoView1.MediaPlayer = _mp;
            string media = DateiPfad;
            _mp.Play(new Media(_libVLC, media, FromType.FromPath));
            if (isMuted != true) _mp.ToggleMute();
           
            //Mediplayer Event Registrieren
           _mp.TimeChanged += _mp_TimeChanged;
            
    }


        public long getTime()
        {
            long VideoTime = _mp.Length;
            return VideoTime;
        }
        public void Toggle_Mute()
        {
            _mp.ToggleMute();

        }

        public void Stop_Playback()
        {
            _mp.Stop();
        }

        void _mp_TimeChanged (object sender, MediaPlayerTimeChangedEventArgs a)
        {
           
            
        }
    }
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Timme am .
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 251
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

Hallo,

evtl. hilft dir folgendes weiter: [FAQ] Kommunikation von 2 Forms
private Nachricht | Beiträge des Benutzers
Timme
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Hi, den Beitrag hab ich natürlich schon gefunden und ich sitz da auch schon 2 Tage davor ,was nicht heißt das die Lösung nicht trotzdem darin verborgen liegen kann, nur leider bekomme ich es in diesem Fall einfach nicht hin.

LG Timme
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16110

beantworten | zitieren | melden

Okay. Und was genau verstehst Du nicht? Wo kommst Du nicht weiter?
Der FAQ Eintrag behandelt exakt Dein Problem mit Erklärung und Beispielcode.

Auf "ich bekomm es nicht hin" ist es halt als Helfer auch nur schwer irgendwas zu antworten.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Timme
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Hi,

ich habe jetzt...


        public event EventHandler _VideoTimeChanged;


        protected virtual void On_VideoTimeChanged(EventArgs a)
        {
            _VideoTimeChanged?.Invoke(this, a);
        }

        public void Start_Content(string DateiPfad,bool isMuted= true )
        {
 
            string media = DateiPfad;
            _mp.Play(new Media(_libVLC, media, FromType.FromPath));
            if (isMuted != true) _mp.ToggleMute();
            
            On_VideoTimeChanged(EventArgs.Empty);
            
        }

... in der zweiten Form/Klasse Definiert

aber wo bzw wie übergebe ich das Object Event

_mp.TimeChanged

ich fürchte ich hab da etwas grundsätzliches nicht verstanden -.-

LG Timme
private Nachricht | Beiträge des Benutzers
Brymax
myCSharp.de - Member



Dabei seit:
Beiträge: 22

beantworten | zitieren | melden

Das sieht doch schonmal nicht schlecht aus.

Aber du muss das Event TimeChanged deines MediaPlayer Objekts trotzdem abbonieren. Wenn dieses Ausgelöst wird kanns du wiederum dein neues VideoTimeChanged auslösen. Und genau dieses Event sollte auch deine Form1 abonniert haben. So bekommt diese auch Kenntnis über das Ereignis. Sprich was du machst ist eine Kettenreaktion auslösen.

MediaPlayer Ereignis löst Ereignis in Form 2 aus welche von deiner Form 1 abonniert wurde.

Form 1


         Screen[] screens = Screen.AllScreens;
         newMainView = new MainView();
         newMainView.Show();
         newMainView.On_VideoTimeChanged += newMainView_On_VideoTimeChanged
         newMainView.Location = Screen.AllScreens[1].WorkingArea.Location;
         newMainView.WindowState = FormWindowState.Maximized;

Form 2


        public event EventHandler _VideoTimeChanged;

        protected virtual void On_VideoTimeChanged(EventArgs a)
        {
            _VideoTimeChanged?.Invoke(this, a);
        }

        public void Start_Content(string DateiPfad, bool isMuted = true)
        {
            string media = DateiPfad;
            _mp.Play(new Media(_libVLC, media, FromType.FromPath));

            if (isMuted != true)
            {
                _mp.ToggleMute();
            }

            _mp.TimeChanged += _mp_TimeChanged;
        }

        void _mp_TimeChanged(object sender, MediaPlayerTimeChangedEventArgs a)
        {
            On_VideoTimeChanged(EventArgs.Empty);
        }

Edit: Hilfreicher Link zu Ereignissen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Brymax am .
private Nachricht | Beiträge des Benutzers
Timme
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Perfekt die Antwort von Brymax hat mir geholfen,
inzwischen bin ich n ganzes stück weiter
und komme auch langsam mit customargs klar ;-)
Dir und auch allen andern vielen Dank

LG Timme
private Nachricht | Beiträge des Benutzers