Entwickler-Ecke
WinForms - Auf Windows.Forms Event methoden zugreifen?
Chiyoko - Mi 03.02.10 16:14
Titel: Auf Windows.Forms Event methoden zugreifen?
Huhu,
wiedermal stehe ich seit ein par Tagen vor einem Problem und ich komm
nicht wirklich dahinter.
Ich schreibe es ausfuehrlich, da es vielleicht bessere Moeglichkeiten
geben koennte, die mir gerade nicht einfallen.
Ich habe 2 Methoden:
Nr 1) -- ist ein load event des UserControls in dem ich Daten aus einem
Ordner einlese und sie ueber eine foreachschleife in einer listBox
aufliste.Ausserdem noch eine List<string> Liste, welche diese
Namen aufnimmt und ueber einen index speichert.
bsp:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| DirectoryInfo dir = new DirectoryInfo(@"c:\\Music\cd1"); FileInfo[] files = dir.GetFiles("*.mid");
List<string> pList = new List<string>();
foreach (FileInfo file in files) { listBox1.Items.Add(file.Name); pList.Add(file.Name); } |
Nr 2 ist ein playstate_changed event des Windowsmediaplayers,
durch diesen moechte ich folgendes erreichen:
Ueber einen Button wird der erste eintrag in der listbox selektiert,
das lied wird abgespielt und der index der listbox +1 hochgesetzt,
sofern das lied zuende ist oder vom User auf stop gestellt wurde.
Das klappt wunderbar.
Nun moechte ich aber das naechste lied automatisch abspielen lassen,
nachdem der index der listbox +1 hochgzaehlt und das item selektiert wurde.
Buttonevent:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void button1_Click(object sender, EventArgs e) { selector = true; listBox1.SetSelected(0, true); axWindowsMediaPlayer1.URL = @"c:\\Music\cd1\Anxious_Heart.mid"; axWindowsMediaPlayer1.Ctlcontrols.play(); } |
AxMediaPlayer_State_changed event:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { if (selector == true) { if (e.newState == 8) { listBox1.SelectedIndex += 1; } axWindowsMediaPlayer1.Ctlcontrols.play(); } } |
Wie kann ich von diesem Event auf Event nr1 zugreifen`?
Alles, was ich bisher rausfand:
- ueber get/set?
- ueber Eventhandler
Ich versuche, auf eine windowsmediaplayer playliste zu verzichten
oder anders gesagt: Ich hab es bisher nicht hinbekommen, eine zu erstellen.
Also die Frage nochmal: Wie kann ich es ermoeglichen, auf die pListe zuzugreifen?
Oder gibt es einfachere Wege, als den ..den ich hier gezeigt habe?
Vielen dank.
JüTho - Mi 03.02.10 16:42
Hat der axWindowsMediaPlayer ein Ereignis Completed o.ä.? Das wäre die passende Stelle für den Aufruf des nächsten Stücks.
Jürgen
Chiyoko - Do 04.02.10 01:16
Mhm nein...
Was ich sehen kann, waere
- EndOfStream
- Statuschanged
- newStream
- MediaChange
- CurrentItemChange
Das waeren so die Events, die es sein koennten(gibt noch etliche mehr)
EDIT:
Naja nur noch validating und validated..meinst du das?
danielf - Do 04.02.10 07:45
Registriere dich doch einfach bei den Events und mach einen Breakpoint hin - so viele sind es ja nicht.
Dann weißt du es.
Chiyoko - Do 04.02.10 13:19
Hehe ich bin noch relativer Anfaenger und versuch mir
die Event sache reinzupruegeln.
Aber das muss man erstmal verstehen(eigene Events und schon erstellte).
Tingel - Do 18.02.10 20:44
Also ich bin zurzeit auch ein einem Player beschäftigt, und hab das Problem das du hast mit dem Event "PlayStateChange" gelöst.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { if (player.playState == WMPLib.WMPPlayState.wmppsMediaEnded) { this.ID++; player.URL = datenbank1.link[ID]; player.Ctlcontrols.play(); } } |
Allerdings hab ich jetzt das Problem, dass der Player das Lied nicht abspielt. Er wählt es zwar aus, aber man muss trotzdem noch auf "Play" drücken. Normalerweise spielt er den Song ja schon alleine durch den "player.URL" Befehl ab, aber sobald der Befehel durch das Event aufgerufen wird, geht es nicht mehr. Was muss ich machen das der Song automatisch abgespielt wird??
Tingel - Di 02.03.10 21:07
Weiß den keiner ne Antwort auf mein Problem? Wie schaff ich es, das er nachdem das Lied fertig gespielt hat, er das nächste aus der Tabelle abspiel?? Ich bekommst einfach ent hin :(
norman2306 - Mi 03.03.10 00:20
Setze mal deine Bedingung mit dem State auf 1
also:
Wenn der Player mit spielen fertig ist, durchläuft er mehrere States. Der letzte ist die 1, dann ist er auch wieder bereit zu spielen und es funzt. Wenn du auf Stop drückst, geht er auch auf die "1", dass musst du dann auch noch handeln, sonst spielt er da auch gleich das nächste...
Chiyoko - Fr 12.03.10 16:48
Neue Frage , altes Thema..: "der MEdiaplayer"...
Nun, ich moechte verhindern, dass ich ueber 300 strings (bzw URLs) schreiben
oder notieren muss.
Darum wollte ich diese einlesen und ausgeben.
Verdeutlichung:
Ich moechte per klick auf ein eingelesenes Item in einer List box/view
das lied abspielen lassen.
Darauf koennte ich per Index zugreifen:
Hiermit muss ich aber noch weiter testen.
Meine Frage waere, was fuer Moeglichkeiten gibt es noch?
Denn diese Variante klappt nicht ganz wie erwuenscht.
Viell. noch ueber eine schleife und den index....
C#-Quelltext
1: 2:
| ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1 AxWindowsMediaPlayer1.URL = ListBox1.Items(ListBox1.SelectedIndex).ToString |
->Mein bisheriger Code, wahrscheinlich etwas unuebersichtlich.
Ich habe schon die anderen 3 listboxen entfernt:p
- Auslesen funkioniert wunderbar und wenn ich alle URLs einzeln
deklariere, geht es auch..(aber das ist ja nicht sinn und Zweck)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| public partial class UC_Mainall_Music : UserControl { public bool FF7; public WMPLib.IWMPPlaylist playlist_ff7;
public UC_Mainall_Music() { InitializeComponent();
this.button1.Click += new EventHandler(this.Button_handler); this.radioButton1.CheckedChanged += new EventHandler(this.Rbutton_handler); }
private void Button_handler(object sender, EventArgs e) { if(FF7 == true) { if (sender == button1) { FF7_Musicplay_cd1(); } } }
private void Rbutton_handler(object sender, EventArgs e) { if (radioButton1.Checked) { FF7_musicload(); FF7 = true; } }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (FF7 == true) { FF7_listbox1_2_3_4_selectedindex(); axWindowsMediaPlayer1.Ctlcontrols.play(); } } private void FF7_musicload() { listBox1.Items.Clear(); try { DirectoryInfo dir = new DirectoryInfo(Path.Combine(Application.StartupPath, (@"Bilder\FF7\Music\cd1")));
FileInfo[] files = dir.GetFiles("*.mid");
foreach (FileInfo file in files) { listBox1.Items.Add(file.Name); } } catch (Exception ex1) { MessageBox.Show(ex1.Message); } } private void FF7_Musicplay_cd1() { axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.Ctlcontrols.stop(); foreach (string fileName in Directory.GetFiles(@"Bilder\FF7\Music\cd1")) { WMPLib.IWMPMedia media = axWindowsMediaPlayer1.newMedia(fileName); axWindowsMediaPlayer1.currentPlaylist.appendItem(media); } axWindowsMediaPlayer1.Ctlcontrols.play(); }
} |
Chiyoko - Sa 13.03.10 02:33
Hab raus:)
Items i-wo auslesen lassen(z.b. im load event),...
und listview fuellen.
In der foreach schleife nur noch den Pfad + text festlegen
und schon funktioniert es einwandfrei:)...
Somit hab ich alle Probleme geloest.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| private void main_Load(object sender, EventArgs e) { DirectoryInfo dir = new DirectoryInfo(Path.Combine(Application.StartupPath, (@""))); FileInfo[] files = dir.GetFiles("*.mid");
foreach (FileInfo file in files) { listView1.Items.Add(file.Name); } }
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { try { foreach (ListViewItem item in listView1.SelectedItems) { string path = Application.StartupPath; path = path + "\\" + item.Text; if (listView1.SelectedItems.Count > 0) axWindowsMediaPlayer1.URL = path;
} axWindowsMediaPlayer1.Ctlcontrols.play(); } catch (Exception ee) { MessageBox.Show(ee.Message); } } } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!