Picturebox 컨트롤 및 트랙볼을 사용하여 이미지 슬라이드 쇼를 수행하려고합니다. 트랙 바는 최소 및 최대 값을 가져 오며 표시 할 이미지 수에 해당합니다. 나는 트랙바 값 변경과 함께 슬라이드를위한 간격 시간을 얻기 위해 타이머를 사용한다.Mousewheel 스크롤 C#에서 winform 이벤트를 프로그래밍 방식으로 수행했습니다.
이제 그림 상자의 각 이미지에 대한 주요 내용은 이미지 위에 사각형 상자를 그립니다.
첫 번째 이미지가 양식에로드 될 때 첫 번째 이미지에서 그릴 수 없습니다. 그러나 마우스 휠을 스크롤하면 할 수 있습니다.
첫 번째 이미지가로드 된 후 마우스 휠 스크롤 이벤트를 트리거하는 데 도움이 필요합니다.
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);
}
}
}
}
또 다른 CreateGraphics() 질문입니다. 앱의 창을 최소화하고 복원하면 사용하지 않아야하는 이유를 알 수 있습니다. 대신 pictureBox1의 Paint 이벤트를 구현하십시오. –