出于某种原因,当我将鼠标悬停在我的c#表单应用程序中的按钮上时,它会导致我的代码重置.考虑到我实际上按钮上没有任何悬停事件,这对我来说似乎很奇怪.我甚至尝试添加另一个按钮,即使我什么都不做,悬停仍会导致重置.
该程序应该用颜色填充油箱,颜色可以在填充时更改.一旦填满,它将重置为空.它应该在下一次滑块控制填充速度与之交互时开始填充.
它正确执行此 *** 作但当我将鼠标悬停在按钮上时它也会再次开始填充.
namespace Assignment5A{ public partial class MainForm : Form { public float streamHeight = 370; public float lastWaterHeight = 0; public float waterHeight = 0; public float waterBottom = 500; public float fillSpeed = 300; public color brushcolor = color.lightBlue; public Graphics g; public Pen pen; public Brush brush = new SolIDBrush(color.lightBlue); public MainForm() { InitializeComponent(); this.WIDth = 500; this.Height =600; this.Backcolor = color.Black; SpeedTimer.Interval = (int)fillSpeed; } private voID MainForm_Paint(object sender,PaintEventArgs e) { g = e.Graphics; pen = new Pen(color.White); g.Drawline(pen,50,200,500); g.Drawline(pen,350,500,500); SpeedTimer.Start(); } private voID SpeedTimer_Tick(object sender,EventArgs e) { if (waterHeight < 270) { brush = new SolIDBrush(brushcolor); g = this.CreateGraphics(); g.FillRectangle(brush,108,136,20,waterBottom - 136 - waterHeight); waterHeight += 1f; g.FillRectangle(brush,51,waterBottom - waterHeight,299,waterHeight - lastWaterHeight); lastWaterHeight = waterHeight; } else { SpeedTimer.Stop(); waterHeight = 0; lastWaterHeight = 0; brush = new SolIDBrush(color.Black); g.FillRectangle(brush,364); } } private voID Speed_Scroll(object sender,EventArgs e) { if (waterHeight < 270) { float scrollValue = Speed.Value; fillSpeed = 300 / scrollValue; SpeedTimer.Interval = (int)fillSpeed; } else { brush = new SolIDBrush(color.Black); g.FillRectangle(brush,230,270); SpeedTimer.Start(); } } private voID colorbutton_Click(object sender,EventArgs e) { Setcolor.ShowDialog(); brushcolor = Setcolor.color; } }}解决方法 好的,我的第一个答案是完全错误的,一定是读错了,对不起.
答案仍然归结为您的MainForm_Paint事件.无论何时绘制或重绘表单,都会触发此事件,并在其上包含任何内容(如按钮).当鼠标悬停在某个元素上时,需要重新绘制它以及它的任何父元素,然后再返回到表单级别.如果表单被调整大小,在隐藏(部分或完全),屏幕关闭以及重新开启等等后返回视图,也会发生这种情况.许多不同的事情将触发表单的Paint事件触发.在你的MainForm_Paint事件中,你有这一行:
SpeedTimer.Start();
…导致计时器启动,一切都重新开始.
我建议您使用表单的Load事件来设置所有这些初始条件,而不是使用MainForm_Paint.只有在表单初始化并在屏幕上显示后才会触发一次.
总结以上是内存溢出为你收集整理的c# – 悬停事件错误触发全部内容,希望文章能够帮你解决c# – 悬停事件错误触发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)