C# 中的鼠标滚轮向下滚动事件以编程方式完成
本文关键字:事件 滚动 编程 方式完 鼠标 | 更新日期: 2023-09-27 18:31:26
我正在尝试使用图片框控件和跟踪栏进行图像幻灯片放映。跟踪栏获取最小值,最大值对应于要显示的图像数量。我使用计时器来获取幻灯片的间隔周期以及跟踪栏值更改。
现在,这是图片框中每个图像的主要内容,我在图像上绘制一个矩形框。
当表单加载第一个图像时,我无法在第一个图像上绘制。但是如果我滚动鼠标滚轮,我可以做到。
我需要帮助在加载第一个图像后触发鼠标滚轮滚动事件一次。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
public event MouseEventHandler MouseWheel;
//MouseEventArgs k = new MouseEventArgs(MouseButtons.Middle,0,0,-1);
string[] pics = { "C:''Downloads''folder_picture_green.png", "C:''Downloads''Aetherpal.ico", "C:''Downloads''folder_picture_green.png" };
public Form1()
{
InitializeComponent();
this.trackBar1.Minimum = 0;
this.trackBar1.Maximum = (pics.Count() - 1);
//this.trackBar1.Maximum = 0;
imageupdate(0);
timer1.Start();
timer1.Interval = 3000;
this.MouseWheel += test;
this.MouseWheel(null, null);
}
private void test(object sender, System.Windows.Forms.MouseEventArgs e)
{
MessageBox.Show("Scrolled");
}
private void check(object sender, System.EventArgs e)
{
//if (Initializing == false) { return; }
if(this.trackBar1.Value < this.trackBar1.Maximum )
this.trackBar1.Value += 1;
else
timer1.Stop();
}
private void Valuechange(object sender, System.EventArgs e)
{
imageupdate(this.trackBar1.Value);
if(this.trackBar1.Value < this.trackBar1.Maximum)
timer1.Start();
}
private void imageupdate(int k)
{
this.pictureBox1.Refresh();
this.pictureBox1.Image = new Bitmap(pics[k]);
Pen blackPen = new Pen(Color.Blue, 5);
this.pictureBox1.Refresh();
using (Graphics g = this.pictureBox1.CreateGraphics())
{
g.DrawRectangle(blackPen, 10, 10, 100, 50);
}
}
}
}
您可以将
此代码添加到表单中以滚动表单(当然使用MouseWheel
):
private void Wheel(int ticks, bool down){
//WM_MOUSEWHEEL = 0x20a
Message msg = Message.Create(Handle, 0x20a, new IntPtr((down ? -1 : 1)<<16), new IntPtr(MousePosition.X + MousePosition.Y << 16));
for(int i = 0; i < ticks; i++)
WndProc(ref msg);
}
//Use it
Wheel(120,true);//Wheel down
Wheel(120,false);//Wheel up
注意:我可以看到您以自己的形式定义了一个MouseWheel
事件。这会隐藏基本MouseWheel
事件,我认为你没有任何理由这样做,你自己的MouseWheel
不能作为基础,你必须抓住win32 message
并自己提出,我们应该使用基础MouseWheel
事件。(也许你认为你的表单类中没有任何MouseWheel
事件?