问题描述
privatevoidMouse_Down(objectsender,MouseEventArgse){//LBttonRBtton分别表示左键和右键被点击的标志。。。。。。。。。。if(e.Button==MouseButtons.Left){LButton=true;intcurrentSecond=currentTime.Millisecond;if(e.Button==MouseButtons.Right){RButton=true;if(currentTime.Millisecond-currentSecond<500){Double_Button(x,y);//左右键一起点击的事件LButton=false;RButton=false;}else{LButton=false;Right_Button(x,y);//右键点击的事件}}elseLeft_Button(x,y);//左键点击的事件}因为左键和右键不可能被同时摁下,上面表示的只是先点击左键在点击右键的情况;思路是:点击左键后,记录下当前的时间。要是点击右键的时间与左键的时间的间隔在500毫秒内就认为它是左右键一起点击。。不过运行的时候左右键一起点击都没有反应。。不知道为什么?请大家多多指教。。我才用.NET的
解决方案
解决方案二:
好像有两个小问题:(1)currentTime是什么?如果你没有在别的地方改变currentTime的值,我认为currentTime.Millisecond-currentSecond的结果永远是0;(2)在触发mousedown事件的那一刻,参数MouseEventArgse只有一个值,所以你下面要判断它同时等于两个值,那应该是行不通的。-----------------------------------建议不根绝datetime来判断,虽然一般不会有人按下鼠标左键不放,然后等几个小时后再按下鼠标右键-_-!可以加一个mouseup事件来实现你所需要的:boolLButton,RButton;privatevoidForm1_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left)LButton=true;if(e.Button==MouseButtons.Right)RButton=true;if(LButton&&RButton){Double_Button(x,y);//左右键一起点击的事件}}privatevoidForm1_MouseUp(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left)LButton=false;if(e.Button==MouseButtons.Right)RButton=false;}
解决方案三:
坐等高手回复!
解决方案四:
privateDateTimecurrentTime;currentTime=newSystem.DateTime();int毫秒=currentTime.Millisecond;//取当前毫秒DateTime是数字型1楼提出的小问题确实存在不过不太明白你后面的意思。。
解决方案五:
datetime是一个结构呀,而你创建这个结构的实例的时候,用的是无参数构造函数,所以currentTime.Millisecond的值是0。--------------------------------------就算currentTime.Millisecond能正确取出当前毫秒:intcurrentSecond=currentTime.Millisecond;if(e.Button==MouseButtons.Right){RButton=true;if(currentTime.Millisecond-currentSecond<500)红色那个判断相当于currentTime.Millisecond-currentTime.Millisecond,因为你在上面这段没有改变currentTime.Millisecond的值,currentTime.Millisecond的值没有变化。你可能认为currentTime.Millisecond的值会随着系统时间而变化,但是它的值一直是0
解决方案六:
那应该传什么参数给Datetime好呢?我现在只是知道思路,不过具体要怎么做,还是没有头绪看了LS提出的问题,今天又试了下,还是没有调好。。谁有相关的文章吗?麻烦发到我邮箱shjl353300@126.com谢谢
解决方案七:
privateDateTimeleftDateTime=DateTime.Now.AddHours(-1);privateDateTimerightDateTime=DateTime.Now.AddHours(-1);privatevoidChart_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Right){rightDateTime=DateTime.Now;TimeSpants=rightDateTime-leftDateTime;if(ts.TotalMilliseconds<400){this.Text="OK";}}elseif(e.Button==MouseButtons.Left){leftDateTime=DateTime.Now;TimeSpants=leftDateTime-rightDateTime;if(ts.TotalMilliseconds<400){this.Text="OK2";}}}
解决方案八:
mark~
解决方案九:
usingSystem;usingSystem.Windows.Forms;classTest:Form{MouseButtonsButton;longTicks;//1个Ticks=100毫微秒longTicksDelay=5000000L;//5000000Ticks=500毫秒Test(){Labellabel=newLabel();label.Parent=this;label.Text="ClickMe";label.MouseDown+=newMouseEventHandler(Mouse_Down);}voidMouse_Down(objectsender,MouseEventArgse){Labellabel=senderasLabel;label.Text="Test";if(e.Button==(MouseButtons.Left|MouseButtons.Right)){label.Text="LandR";}elseif(e.Button==MouseButtons.Left){label.Text=(DateTime.Now.Ticks-Ticks<TicksDelay&&Button==MouseButtons.Right)?"LandR":"Lonly";}elseif(e.Button==MouseButtons.Right){label.Text=(DateTime.Now.Ticks-Ticks<TicksDelay&&Button==MouseButtons.Left)?"LandR":"Ronly";}Button=e.Button;Ticks=DateTime.Now.Ticks;}staticvoidMain(){Application.Run(newTest());}}
解决方案十:
usingSystem;usingSystem.Windows.Forms;classTest:Form{MouseButtonsButton;longTicks;//1个Ticks=100毫微秒longTicksDelay=5000000L;//5000000Ticks=500毫秒Test(){Labellabel=newLabel();label.Parent=this;label.Text="ClickMe";label.AutoSize=true;label.MouseDown+=newMouseEventHandler(Mouse_Down);}voidMouse_Down(objectsender,MouseEventArgse){Labellabel=senderasLabel;label.Text="Test";if(e.Button==(MouseButtons.Left|MouseButtons.Right)){label.Text="左右键一起点击";//Double_Button(x,y);}elseif(e.Button==MouseButtons.Left){if(DateTime.Now.Ticks-Ticks<TicksDelay&&Button==MouseButtons.Right){label.Text="先点击右键,紧接着点击左键";//Double_Button(x,y);}else{label.Text="点击左键";//Left_Button(x,y);}}elseif(e.Button==MouseButtons.Right){if(DateTime.Now.Ticks-Ticks<TicksDelay&&Button==MouseButtons.Left){label.Text="先点击左键,紧接着点击右键";//Double_Button(x,y);}else{label.Text="点击右键";//Right_Button(x,y);}}Button=e.Button;Ticks=DateTime.Now.Ticks;}staticvoidMain(){Application.Run(newTest());}}
解决方案十一:
谢谢LS的源程序。。通过了。。:-)有没什么关于C#WINDOW应用程序的书啊推荐几本嘛我图书馆借的那些书感觉都没什么用处的
解决方案十二:
MicrosoftC#Windows程序设计:上下册(含CD-ROM一张)北京大学出版社/2002-9-1/(美)佩特佐德(Petzold,C.)著,天宏工作室译/160元ISBN:9787301051405C#WindowsForm编程的经典,强烈推荐。
解决方案十三:
恩。。谢谢你了哈
解决方案十四:
又有一个问题了。。。这是左右键一起点击事件的部分:假设标的雷是对的,一起点击后打开周围的按钮。//左右键一起点击事件privatevoidDouble_Button(intx,inty){intn=0;for(inti=x-1;i<x+1&&i<=Widths&&i>=0;i++)for(intj=y-1;j>y+1&&j<=Heights&&j>=0;j++)if(buttonarray[i,j].Text=="*")n++;//扫描当前点四周,n为当前点雷的个数;用“*”标记为雷//buttonarray[x,y].Text=Convert.ToString(MilesNum[x,y]);if(n==MilesNum[x,y]){//MilesNum[x,y]是(x,y)点的雷数,前面已经正确赋值了privateint[,]MilesNum;//Open_Button(x,y)打开(x,y)点按钮if(Check(x-1,y-1)==true)Open_Button(x-1,y-1);if(Check(x-1,y)==true)Open_Button(x-1,y);if(Check(x-1,y+1)==true)Open_Button(x-1,y+1);if(Check(x,y-1)==true)Open_Button(x,y-1);if(Check(x,y+1)==true)Open_Button(x,y+1);if(Check(x+1,y-1)==true)Open_Button(x+1,y-1);if(Check(x+1,y)==true)Open_Button(x+1,y);if(Check(x+1,y+1)==true)Open_Button(x+1,y+1);}}//运行的时候if(n==MilesNum[x,y])不会执行Open_Button();用"buttonarray[x,y].Text=Convert.ToString(MilesNum[x,y]);"显示的MilesNum[x,y]==n的但if(n!=MilesNum[x,y])不管没有标雷,他都会执行Open_Button();这是为什么啊?
解决方案十五:
intn=0;for(inti=x-1;i<x+1&&i<=Widths&&i>=0;i++)for(intj=y-1;j>y+1&&j<=Heights&&j>=0;j++)if(buttonarray[i,j].Text=="*")n++;改为intn=0;for(inti=x-1;i<=x+1;i++){for(intj=y-1;j<=y+1;j++){if(i<=Widths&&i>=0&&j<=Heights&&j>=0&&buttonarray[i,j].Text=="*")n++;}}
解决方案:
或者:intn=0;for(inti=Math.Max(x-1,0);i<=Math.Min(x+1,Widths);i++){for(intj=Math.Max(y-1,0);j<=Math.Min(y+1,Heights);j++){if(buttonarray[i,j].Text=="*")n++;}}
解决方案:
如果buttonarray[i,j]的下标是0起始的,上面的Widths、Heights恐怕都要换成Widths-1、Heights-1。
解决方案:
改了的程序和我原来写的程序有什么不一样啊?为什么原来的不行呢?intn=0;for(inti=x-1;i<=x+1;i++){for(intj=y-1;j<=y+1;j++){if(i<=Widths&&i>=0&&j<=Heights&&j>=0&&buttonarray[i,j].Text=="*")n++;}}这个会超界了可以把IF改为这个:if((i+1)<=Widths&&(i-1)>=0&&(j+1)<=Heights&&(j-1)>=0&&buttonarray[i,j].Text=="*")
解决方案:
我不是说过了吗:如果buttonarray[i,j]的下标是0起始的,上面的Widths、Heights恐怕都要换成Widths-1、Heights-1。if(i>=0&&i<Widths&&j>=0&&j<Heights&&buttonarray[i,j].Text=="*")n++;
或者:intn=0;for(inti=Math.Max(x-1,0);i<=Math.Min(x+1,Widths-1);i++){for(intj=Math.Max(y-1,0);j<=Math.Min(y+1,Heights-1);j++){if(buttonarray[i,j].Text=="*")n++;}}
你原来的程序根本不行,会造成循环提前中止。
解决方案:
如果你同时判断左右键点击的时候,记得加入大概300毫秒以内的延时。因为计算机的处理速度非常快,用户很难在这个时间内两个键同时按下。