问题描述:
自定义控件:MyPlayer // 自定义播放器
属性:Url           // 播放路径
事件:UrlChanged    // 当属性Url改变时发生
事件使用描述:
    MyPlayer player = new MyPlayer();
    player.UrlChanged += MyPlayer.UrlChangedHandler(player_UrlChanged);
    private void player_UrlChanged(Object sender, EventArgs e)
    {
        // 事件处理程序
    }
附言:其实是实现一个类似于ComboBox中的SelectedIndexChanged事件。不知道这样的描述是不是明白。本人初识C#,对其中好多东西知之甚少,在此请教各位前辈不吝赐教。
谢谢大家。

解决方案 »

  1.   

    当URLCHANGED  发生事件?你的MYPLAYER.URL=你选择的URL时间进度返回起始点,并执行播放事件
      

  2.   

    是啊,就是说当使用这个控件时,如果对属性Url进行赋值,则自动播放该路径对应的多媒体文件。
    就是模仿C#中的MediaPlayer控件的Url属性,在那个过程中如果对Url赋值即播放指定多媒体文件。
      

  3.   

    就是自定义事件吧?用托管啊:
    public delegate void OnUrlChaged(Object sender, EventArgs e);
    public event OnUrlChanged UrlChanged;public string Url
    {
        set{  _Url = value; UrlChanged(..,..);}
    }OnUrlChaged(Object sender, EventArgs e) 的参数根据需要去设计.
      

  4.   

    如果lz是希望用户更换播放文件时,立即播放用户选择的文件是吧。。 
    如果把MediaPlayer单独做成一个控件的话可以定一个public方法。 如
    public void setUrl(string url)
    {
      控件.FileName=url;
    }
    当用户换文件时可能会用拖拽方式,openFileDialog方式,播放列表点击方式都会有事件发生,
    在事件里调用setUrl(url)就可以了。
    如果lz是希望做一个urlonchange事件的话,我没做过,不过有个思路,
    既然有urlonchange事件,在定义的控件里肯定有url这个属性,可不可以定一个的属性来保存值,
    定义一个timer时间可以短一点例如500毫秒,当url不等于urlHidden的时候调用urlonchange方法,
    同时urlHidden的值设成url的值。
      

  5.   

    不是的不是的,还是没有理解我的意思。
    我的意思是说如果监控一个参数,当该参数改变时则触发事件。
    就好像ComboBox里的SelectedIndexChanged事件一样,当改变了ComboBom中所选的项时,SelectedIndex发生变化,则触发事件SelectedIndexChanged。
    如果只是利用托管写一个事件的话那么那个事件之能手动触发。写事件的话当然是要用托管的,但是应该把只是用到托管,应该还有其他东西吧。
    其实要是单实现这个功能的话很简单,实在不行的话我可以加一个ComboBox变量,将Url直接存储在ComboBox的Item里就可以了,那样的话就可以利用ComboBox提供的事件来实现自动触发。但是那样的话即使把功能实现了也还是不会这方面的东西。
    所以我想请教一下应该怎么实现一个当某参数值被更改时自动触发一个事件的问题。
    谢谢大家。
      

  6.   

    public string Url
    {
    set{  _Url = value; UrlChanged(..,..);}
    } 不就是在Url属性改变的时候触发了事件吗?!