问题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 ,但我实在不知道如何做。
在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 ,但我实在不知道如何做。
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>>保存
在于判断鼠标是否为刚刚进入groupBox,可以在进入时设置一个flag为true,
离开时为false,这个有事件的,当然鼠标刚进入groupbox时,并且flag为false,播放声音,同时记录flag为true;问题2:
你搞3个变量不就接了
问题就是有3个不同的数据类型.
class T
{
int i{get;set;}
string test{get;set;}
}
嗯,谢谢,这个问题我已经解决,在外面建一个类,
private class GuoLvValue
{
public GroupBox Gb;
public string CbName;
public int CpCanShu;
}
然后在方法内 :
List<GuoLvValue> Glv = new List<GuoLvValue>();
在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);
}
}
我还是想不出如何处理,奇怪的是:在属性编辑栏里,我竟然找不到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是什么,我还没学习。
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的实例我就不贴编码了,因为色及到上千行的编码,关键是我想知道使用哪个方法。
只能能解决问题,我会重谢的。
{
this.label1.AutoSize=true;
this.label1.Text="GroupBox1.MouseHover Fired "+i.ToString() +"Times";
i++;
}
还是不行呢!
问题2已经解决,问题1 见8楼
还有一个问题见11楼 IEnumerable<IGrouping<int, Cp>> V;
且多了一个延时
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();
}
}我已经验证过了,你改一下文件路径就行了
嗯,谢谢你的回答,我正在看看,不知道除此外还有无别的方法。同时问题3 11 楼11楼 IEnumerable<IGrouping<int, Cp>> V;
没办法被我自己解决了。:
List<int> R = V.Where(a => a.Count() == 1).Select(a => a.Key).ToList();
不过总感觉还是有点问题,有时当鼠标从外进入groupBox1时,它不播放声音。
如果groupBox中没有其他控件,你鼠标进入一次,就只会激发一次MouseMover事件的!
如果groupBox中有其他控件,由于激发了其他控件的相应鼠标事件,所以会导致你说的那种情况。
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;
}
}