问题1:
在WinForm 上有两个groupBox控件:groupBox1 和groupBox2,
我想当鼠标进入这两个groupBox中的一个时,播放一个声音文件,
当鼠标进入groupBox后,不再播放声音文件,仅当进入时播放,鼠标在groupBox内移动时不要播放
如何编程?
        SoundPlayer Sp = new SoundPlayer();
        Sp.SoundLocation = Application.StartupPath + @"\Sound\Word\Press.wav";
        Sp.Play();问题2:
我想在一个方法内建一个数组,要求能存储 一个是string 类型,一个是 groupBox 类型,一个是int 类型,该如何处理?有人说使用arraylist ,但我实在不知道如何做。

解决方案 »

  1.   

    MouseHover 在鼠标指针停放在控件上时发生
    MouseLeave 在鼠标指针离开控件时发生。 
    MouseMove 当用户将鼠标指针移至控件上方时发生。
    private void groupbox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                int mouseX = e.X;
                int mouseY = e.Y;
               //判断位置
            }
    Dictionary<int,List<GroupBox>>保存
      

  2.   

    问题1:
    在于判断鼠标是否为刚刚进入groupBox,可以在进入时设置一个flag为true,
    离开时为false,这个有事件的,当然鼠标刚进入groupbox时,并且flag为false,播放声音,同时记录flag为true;问题2:
    你搞3个变量不就接了
      

  3.   

    不能使用MouseMove啊,当鼠标在里面移动时,它会不停地播放,我要求是只有在鼠标进入groupbox时才播放,在里面移动鼠标时不播放。Dictionary<int,List<GroupBox>>也不行啊,还要存储一个string 类型,并且要求是当们一一对应的。
    问题就是有3个不同的数据类型.
      

  4.   

    自定义实体类List<T>
    class T
    {
     int i{get;set;}
     string test{get;set;}
    }
      

  5.   


    嗯,谢谢,这个问题我已经解决,在外面建一个类,
            private class GuoLvValue
            {
                public GroupBox Gb;
                public string CbName;
                public int CpCanShu;
            }
    然后在方法内 :
             List<GuoLvValue> Glv = new List<GuoLvValue>();
      

  6.   


    在WINFORM上设有一个GroupBox ,在GroupBox 内有一个Button .
    我想当鼠标从WinForm上移入GroupBox 内时,播放一个声音文件。
    要求仅当鼠标从GroupBox外移入GroupBox 内时,才播放这个声音文件,
    当鼠标在GroupBox内移动时不播放。我知道可以使用MouseEnter()来判断,但是这样就又有一个问题:
    当鼠标从button 上方移出至 GroupBox 的空白区域时,它又播放这个声音文件了。HOW TO DO ?
    相关编码:
           //using System.Media;
            
            void GroupBox_MouseEnter(object sender, EventArgs e)
            {
                try
                {   SoundPlayer Sp = new SoundPlayer();
                    Sp.SoundLocation = Application.StartupPath + @"\Sound\CanShu\" + ((Control)sender).Text + ".wav";
                    Sp.Play();
                }
                catch (Exception ee)    
                {
                    MessageBox.Show(ee.Message);
                }
            }
      

  7.   


    我还是想不出如何处理,奇怪的是:在属性编辑栏里,我竟然找不到MouseEnter事件,
    所以我不得不在别的地方:
    this.groupBox1.MouseEnter += new EventHandler(groupBox1_MouseEnter);
    然后:
            void groupBox1_MouseEnter(object sender, EventArgs e)
            {
                Sp.SoundLocation = Application.StartupPath + @"\Sound\test.wav";
                Sp.Play();
            }
    但是在这个方法里我找不到判断鼠标坐标的编码。
    不知道MouseCapture是什么,我还没学习。
      

  8.   

    怎么就没人回了呢,问题见10 楼。还有一个问题:一个 IEnumerable<IGrouping<int, Cp>> V;
                List<int> Result = new List<int>();            foreach (IGrouping<int, Cp> item in V)
                {
                    if (item.Count() == 1)
                    {
                        Result.Add(item.Key);
                    }
                     //Console.WriteLine("Key:{0}       Count:{1}", item.Key , item.Count());
                }我想获得V中所有KEY 的出现次数为1 的所有KEY的集合到一个列表,我想应该有一个方法处理,这样可
    使编码更简洁些,应如何处理?谢谢。

    另注:对于 V的实例我就不贴编码了,因为色及到上千行的编码,关键是我想知道使用哪个方法。
    只能能解决问题,我会重谢的。
      

  9.   

    要实现进入GroupBox就播放一次,然后不再播放,可以用MouseHover事件,进入一次就触发一次,满足你的需要! void GroupBox1MouseHover(object sender, EventArgs e)
    {
    this.label1.AutoSize=true;
    this.label1.Text="GroupBox1.MouseHover Fired "+i.ToString() +"Times";
    i++;
    }
     阿捷 
      

  10.   


    还是不行呢!
    问题2已经解决,问题1 见8楼
    还有一个问题见11楼 IEnumerable<IGrouping<int, Cp>> V;
      

  11.   

    和MouseEnter一样,经过其他控件之后次数+1
    且多了一个延时
      

  12.   

    问题1 见8楼假设在GroupBox 上放一个button,当鼠标从button 上方移出,并且鼠标还在GroupBox 内时,它又播放声音了。
      

  13.   

    问题1:
    Point lastpt;
    void groupBox1_MouseLeave(object sender, EventArgs e)
    {
       lastpt = this.PointToClient(MousePosition);
    }void groupBox1_MouseEnter(object sender, EventArgs e)
    {
        Rectangle rect = new Rectangle(groupBox1.Location,groupBox1.Size);
        Point pt = this.PointToClient(MousePosition);
        if (rect.Contains(pt) && !rect.Contains(lastpt))
        {
            SoundPlayer Sp = new SoundPlayer();
            Sp.SoundLocation = @"D:\Visual Studio 2008\Windows Shutdown.wav";
            Sp.Play();
         }            
    }我已经验证过了,你改一下文件路径就行了
      

  14.   


    嗯,谢谢你的回答,我正在看看,不知道除此外还有无别的方法。同时问题3 11 楼11楼 IEnumerable<IGrouping<int, Cp>> V;
    没办法被我自己解决了。:
      List<int> R  =  V.Where(a => a.Count() == 1).Select(a => a.Key).ToList();
      

  15.   


    不过总感觉还是有点问题,有时当鼠标从外进入groupBox1时,它不播放声音。
      

  16.   

    其实你分析一下事件分发的机制就知道了。
    如果groupBox中没有其他控件,你鼠标进入一次,就只会激发一次MouseMover事件的!
    如果groupBox中有其他控件,由于激发了其他控件的相应鼠标事件,所以会导致你说的那种情况。
     阿捷 
      

  17.   

    bool Isfirst=true; 
    private void groupbox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
      {
         if(Isfirst)
         {
              SoundPlayer Sp = new SoundPlayer();
              Sp.SoundLocation = Application.StartupPath + @"\Sound\Word\Press.wav";
              Sp.Play();
              Isfirst=false; 
         }
      }