读书人

c# winform 怎么用鼠标滚轮改变pictur

发布时间: 2012-06-03 16:59:40 作者: rapoo

c# winform 如何用鼠标滚轮改变pictureBox中图片的大小`?
鼠标中键滚轮,向上滚动是放大图片,向下滚动是缩小图片

这个如何做呀

我找了好久也没找到滚轮事件

就找到个MouseWheel,可惜不会用

pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel);

C# code
private void pictureBox1_MouseEnter(object sender, EventArgs e){    pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); }private void pictureBox1_MouseWheel(object sender, MouseEventArgs e){    MessageBox.Show(e.Delta.ToString());    //this.pictureBox1.Width = 50;}


我这样写一点反映也没有

请教大家了

[解决办法]
查查Windows消息
[解决办法]
呵呵,处理事件倒不是难点,问题在于似乎PictueBox不支持对其中Image对象的自动绽放。
其实我给你个简单方法:
1:添加一个PictureBox,注意:不要设置Image属性,设置Background属性,并且设置backgroudImagelayout为stretch。
2:给窗口添加mouse_wheel(注意不是给picturebox)。
3:内容如下:
C# code
        //给窗口添加句柄。        this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);            void Form1_MouseWheel(object sender, MouseEventArgs e)        {            var t = pictureBox1.Size;            t.Width += e.Delta;            t.Height += e.Delta;            pictureBox1.Size = t;        }
[解决办法]
主要是Picture控件得不到焦点,所以滚动没有效果

在它的MouseEnter事件里面设置它的焦点
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
pictureBox1.Focus();
}

void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
double scale = 1;
if (pictureBox1.Height > 0)
{
scale = (double)pictureBox1.Width / (double)pictureBox1.Height;
}
pictureBox1.Width += (int)(e.Delta * scale);
pictureBox1.Height += e.Delta;
}
[解决办法]
xuexi
[解决办法]
刚才试了一下还有一个方便点的。
1:设置Image属性;
2:调整Sizemode为Zoom;

在事件响应中不需要同时调整高和宽了,只需要调整一个即可。(你根据需要自己确定,这种缩放会自动保持比例)。
这个方案要好得多。

需要的话发消息给我我可以发我的测试代码给你。
[解决办法]
自己重写PictureBox的Paint过程就行了
Image用Graphics画上去,如果缩放,完全自己控制
在PictureBox的MouseWheel事件中,计算出图像的尺寸,然后让PictureBox Invalidate
[解决办法]
晓习来了
[解决办法]
合35的答案比完美
[解决办法]
有个按钮事件
里面可以找到滚轮键值
捕捉键值进行处理就可以了
[解决办法]
C# code
        如果没有解决的话,可以看看我的代码[DllImport("user32.dll")]        public static extern int WindowFromPoint(int xPoint, int yPoint);        void Form1_MouseWheel(object sender, MouseEventArgs e)        {            System.Drawing.Point p=  PointToScreen(e.Location);            if (WindowFromPoint(p.X, p.Y) == pictureBox1.Handle.ToInt32())            {                if (e.Delta == 120)                {                    MessageBox.Show("向前");                }                else if(e.Delta<0)                {                    MessageBox.Show("向后");                }            }        }        private void Form1_Load(object sender, EventArgs e)        {            this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);        } 


[解决办法]
当鼠标在窗体上滚动时,使用WindowFromPoint判断当前坐标的句柄,用来判断鼠标是不是在pictureBox1上滚动的
然后判断e.Delta

我想
应该可以结帖了

今天的结帖率很低

[解决办法]
调整Sizemode为Zoom
[解决办法]
学习
[解决办法]
要是简单点,可以这样来处理:

C# code
Image img = Image.FromFile(@"C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Water lilies.jpg");private float scale = 1;protected override void OnPaint(PaintEventArgs e){    base.OnPaint(e);    e.Graphics.ScaleTransform(this.scale, this.scale);    e.Graphics.DrawImage(this.img, p);}protected override void OnMouseWheel(MouseEventArgs e){    base.OnMouseWheel(e);    int wheels = e.Delta * SystemInformation.MouseWheelScrollLines / 120;    scale -= wheels * 0.001f;    this.Invalidate();}
[解决办法]
学习一下!!
[解决办法]
标记
[解决办法]
学习到了呵呵

读书人网 >C#

热点推荐