Also, da hier noch niemand was dazu geschrieben hat, habe ich mal damit rumgespielt
Ich bin zu der Erkenntnis gekommen, dass das Control des MediaPlayers zwar ein Event feuert, wenn sich der Mauszeiger über das Control bewegt, aber kein Event besitzt bzw. feuert, wenn sich der Mauszeiger wieder rausbewegt.
Also habe ich eine andere Lösung. Und die Idee dabei ist folgende:
Ich habe eine private Property, die als Datentyp einen Enum zurückliefert. Dieser wird beim Initialisieren auf den Staus "none" gesetzt. Wenn das Event "MouseMoveEvent" des Players gefeuert wird (also der Mauszeiger befindet sich über dem Control, so wird die Property auf den Wert "full" gesetzt. Der UiMode des Players wird dabei gleich dem Enum-Wert gesetzt. Davor ist noch eine Prüfung drin, um nicht den UiMode bei jeder kleinen Mausbewegung neu zu setzen. Das ist das setzten des PlayerUiMode auf "full".
Um nun beim Verlassen der Maus wieder auf den UiMode "none" zu kommen, verwende ich einefach die überschriebene Methode "OnMouseMove" der Form. Diese wird nur ausgeführt, wenn sich der Mauszeiger in einer Fläche der Form befindet, jedoch nicht über dem Player. Dort wird mit der Property genauso verfahren und diese auf "none" gesetzt.
Anmerkung1: der Player im Test befand sich direkt auf der Form. Wenn dieser jedoch noch in einem anderen Control eingebettet ist (z.B. Panel oder so), dann müsste das Mouseover-Event des Controls benutzt werden.
Anmerkung2: bei schneller Bewegung des Mauszeigers aus der Form kann es passieren, dass der Player in seinem vollen Modus bleibt, da dann nicht das Event zum zurücksetzen gefeuert wird.
Gut, und da ich weiss, dass Dir Erlärungen nuicht viel bringen, hier mal der Code:
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:
| public enum UiMode { none, full }
private UiMode playerUiMode = UiMode.none; private UiMode PlayerUiMode { get { return playerUiMode; } set { if (playerUiMode != value) { playerUiMode = value; axWindowsMediaPlayer1.uiMode = playerUiMode.ToString(); } } }
public Form1() { InitializeComponent(); axWindowsMediaPlayer1.MouseMoveEvent += new AxWMPLib._WMPOCXEvents_MouseMoveEventHandler(axWindowsMediaPlayer1_MouseMoveEvent); axWindowsMediaPlayer1.uiMode = PlayerUiMode.ToString(); }
private void axWindowsMediaPlayer1_MouseMoveEvent(object sender, AxWMPLib._WMPOCXEvents_MouseMoveEvent e) { PlayerUiMode = UiMode.full; }
protected override void OnMouseMove(MouseEventArgs e) { PlayerUiMode = UiMode.none; base.OnMouseMove(e); } |
Hoffe, es bringt Dir was!
LG, Marko