winform实现图片的滑动效果

      使用winform实现图片的滑动效果(类似网站首页图片滑动切换效果),结果实现了,但是效果其实不是很理想。也许有更好的方法。 

       

     

       

    

     Timer timerSlide = null;

        //当前初始化的PictureBox
        PictureBox box = null;
        //当前PictureBox
        PictureBox curBox = null;
        //下一个PictureBox
        PictureBox nxtBox = null;
        //前进方向
        string direction = "";
        //当前图片的索引
        int curIdx = 0;

        //Panel1的宽度
        int width = 0;
        //当前图片x的坐标
        int curXPos = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Init();
        }

        private void Init()
        {
            width = splitContainer1.Panel1.Width;

            timerSlide = new Timer();
            timerSlide.Interval = 100;
            timerSlide.Tick += timerSlide_Tick;
            timerSlide.Enabled = false;

            //初始化Panel1
            box = new PictureBox();
            box.Size = new Size(splitContainer1.Panel1.Width, splitContainer1.Panel1.Height);
            box.SizeMode = PictureBoxSizeMode.StretchImage;
            box.Image = imageListContainer.Images[0];
            splitContainer1.Panel1.Controls.Clear();
            splitContainer1.Panel1.Controls.Add(box);

            curBox = box;
        }

        private void timerSlide_Tick(object sender, EventArgs e)
        {
            if (direction.Equals("right"))
            {
                splitContainer1.Panel1.Controls.Clear();
                splitContainer1.Panel1.Controls.Add(curBox);
                splitContainer1.Panel1.Controls.Add(nxtBox);
                curBox.Location = new Point(curXPos, 0);
                nxtBox.Location = new Point(width + curXPos, 0);
                if (Math.Abs(curXPos) == width)
                {
                    curXPos = 0;
                    timerSlide.Enabled = false;
                    curBox = nxtBox;
                }
                curXPos -= 30;
            }
            else if (direction.Equals("left"))
            {
                splitContainer1.Panel1.Controls.Clear();
                splitContainer1.Panel1.Controls.Add(curBox);
                splitContainer1.Panel1.Controls.Add(nxtBox);
                curBox.Location = new Point(curXPos, 0);
                nxtBox.Location = new Point(curXPos - width, 0);
                if (curXPos == width)
                {
                    curXPos = 0;
                    timerSlide.Enabled = false;
                    curBox = nxtBox;
                }
                curXPos += 30;
            }
            else
            {
                timerSlide.Enabled = false;
                return;
            }

            //timerSlide.Enabled = false;
        }

        private void lbLeft_Click(object sender, EventArgs e)
        {
            if (curIdx == 0)
            {
                curIdx = imageListContainer.Images.Count - 1;

                box = new PictureBox();
                box.Size = new Size(splitContainer1.Panel1.Width, splitContainer1.Panel1.Height);
                box.SizeMode = PictureBoxSizeMode.StretchImage;
                box.Image = imageListContainer.Images[curIdx];
                splitContainer1.Panel1.Controls.Clear();
                //splitContainer1.Panel1.Controls.Add(box1);

                //curIdx = imageListContainer.Images.Count - 1;
            }
            else
            {
                curIdx -= 1;

                box = new PictureBox();
                box.Size = new Size(splitContainer1.Panel1.Width, splitContainer1.Panel1.Height);
                box.SizeMode = PictureBoxSizeMode.StretchImage;
                box.Image = imageListContainer.Images[curIdx];
                splitContainer1.Panel1.Controls.Clear();
                //splitContainer1.Panel1.Controls.Add(box1);

                //curIdx -= 1;
            }
            direction = "left";
            nxtBox = box;
            //启动定时器
            timerSlide.Enabled = true;
        }

        private void lbRight_Click(object sender, EventArgs e)
        {
            if (curIdx == imageListContainer.Images.Count - 1)
            {
                curIdx = 0;

                box = new PictureBox();
                box.Size = new Size(splitContainer1.Panel1.Width, splitContainer1.Panel1.Height);
                box.SizeMode = PictureBoxSizeMode.StretchImage;
                box.Image = imageListContainer.Images[curIdx];
                splitContainer1.Panel1.Controls.Clear();
                //splitContainer1.Panel1.Controls.Add(box2);

                //curIdx = 0;
            }
            else
            {
                curIdx += 1;

                box = new PictureBox();
                box.Size = new Size(splitContainer1.Panel1.Width, splitContainer1.Panel1.Height);
                box.SizeMode = PictureBoxSizeMode.StretchImage;
                box.Image = imageListContainer.Images[curIdx];
                splitContainer1.Panel1.Controls.Clear();
                //splitContainer1.Panel1.Controls.Add(box2);

                //curIdx += 1;
            }
            direction = "right";
            nxtBox = box;
            //启动定时器
            timerSlide.Enabled = true;
        }

  

原文地址:https://www.cnblogs.com/lu-yuan/p/11599538.html

时间: 2024-10-16 22:34:54

winform实现图片的滑动效果的相关文章

Android进阶:ListView性能优化异步加载图片 使滑动效果流畅

ListView 是一种可以显示一系列项目并能进行滚动显示的 View,每一行的Item可能包含复杂的结构,可能会从网络上获取icon等的一些图标信息,就现在的网络速度要想保持ListView运行的很好滚动流畅是做不到的 所以这里就需要把这些信息利用多线程实现异步加载 实现这样功能的类 [java] view plaincopy public class AsyncImageLoader { private HashMap<String, SoftReference<Drawable>&

Android实现左右滑动效果

本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来就让我们开始实现这种效果.为了方便大家理解,我们先来看一下效果图: 主要效果图如下图:    接下来我们看一下程序结构图: MainActivity文件中代码: package com.android.flip; import android.app.Activity; import android

做微信公众号时,移动端滑动效果(swiper插件(display:none))显示滑动问题

微信公众号的制作,其中缺少不了希望实现标题.内容.图片的滑动效果, 这时候可以选择使用(swiper插件)实现相应效果,功能十分强大,链接:http://www.swiper.com.cn/: 最近做一款公众号时,在实现功能时遇到一难点,废了九牛二虎之力,终于在一高人的帮助下解决了. 1.问题描述: 原本该滑动项是隐藏的(display:none;),滑动项的代码是参考swiper插件文档内容而写, 通过按钮点击之后该滑动项显示(dispay:block),再进行左右滑动效果时,始终显示swip

Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505 自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gallery的效果,但是HorizontalScrollView存在一个很大的问题,如果你仅是用来展示少量的图片,应该是没问题的,但是如果我希望HorizontalScr

Flexslider图片轮播、文字图片相结合滑动切换效果

Flexslider是一款基于的jQuery内容滚动插件.它能让你轻松的创建内容滚动的效果,具有非常高的可定制性.开发者可以使用Flexslider轻松创建各种图片轮播效果.焦点图效果.图文混排滚动效果. Flexslider具有以下特性: 支持滑动和淡入淡出效果. 支持水平.垂直方向滑动. 支持键盘方向键控制. 支持触控滑动. 支持图文混排,支持各种html元素. 自适应屏幕尺寸. 可控制滑动单元个数. 更多选项设置和回调函数. HTML 首先在页面head部位载入jquery库文件和Flex

原生JavaScript实现的图片轮播左右滑动效果函数封装

原生js实现的图片轮播左右滑动效果函数封装 方便以后需要的时候拿出来复用. 适合新手学习使用. 使用方法轮播图的html结构就不多说了.不过有一点:为了实现无缝无限轮播,需要在三张图片的最前面和最后面再额外添加两张图片(见下),原理简单说就是当图片滑动到最后一张时立马跳到第二张,眼睛看上去就像前后无缝一样. 把img_slider.js引入html,然后编辑window.onload = (function () { ··· });中的内容. (获取图片床,按钮,标识等元素.然后调用slideI

Flexslider图片轮播文字图片相结合滑动切换效果

Flexslider是一款基于的jQuery内容滚动插件.它能让你轻松的创建内容滚动的效果,具有非常高的可定制性.开发者可以使用Flexslider轻松创建各种图片轮播效果.焦点图效果.图文混排滚动效果. Flexslider具有以下特性: 支持滑动和淡入淡出效果. 支持水平.垂直方向滑动. 支持键盘方向键控制. 支持触控滑动. 支持图文混排,支持各种html元素. 自适应屏幕尺寸. 可控制滑动单元个数. 更多选项设置和回调函数. 在线演示一 在线演示二 在线演示三 在线演示四 源码下载 Fle

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView 我们来定制一下吧 布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="m

Js效果:图片轮播;选项卡;侧面菜单下拉效果;进度条效果;滑动效果;好友列表选中效果;点击选中显示效果

选项卡效果表: <body><div id="aaa"> <div class="bbb" style="width:50px; height:30px; background-color:#3F0" onclick="Show('d1')">娱乐</div> <div class="bbb" style="width:50px; height