当前位置:编程学习 > C#/ASP.NET >>

C#中,关于在一个窗口显示多张图片的问题

   我想在一个窗口中,建立小的显示窗口,下面有两个按钮,“上一部分”“下一部分”,每次按按钮,出现一张图片。这个该怎么实现啊?是用panel还是用picture??
   谢谢大神们了,菜鸟感激不尽! --------------------编程问答-------------------- 能不能重新表述下,没看懂。 最好带上一个 想要实现什么效果的草图 --------------------编程问答-------------------- 用什么都可以,这个没什么关系的,在显示图片的地方,你可以假设他是一个button,也可以假设它是一个picture,或其他什么的,你要做的只是在点击上一部分时,要更新那个显示图片的控件的某个属性 --------------------编程问答--------------------
用Imagelist控件存放图片
int j=0;
下一部分按钮事件
          if (j == imageList1.Images.Count)
            {
                j = 0;
            }
            pictureBox1.Image = imageList1.Images[j];
            j++;

下一部分按钮事件
          if (j ==0)
            {
                j = imageList1.Images.Count-1;
            }
            pictureBox1.Image = imageList1.Images[j];
            j--;
--------------------编程问答--------------------

 public partial class Form1 : Form
    {
        int i=0;       
   
        public Form1()
        {
            InitializeComponent();
        }
  
        private void Form1_Load(object sender, EventArgs e)
        {
            //初始化
            pictureBox1.Image = imageList1.Images[0];
        }
        //下一步
        private void button2_Click(object sender, EventArgs e)
        {

            if (i == imageList1.Images.Count-1)
            {
                i = 0;
                pictureBox1.Image = imageList1.Images[i];
            }
            else
            {
                i = i + 1;
                pictureBox1.Image = imageList1.Images[i];
            }
        }
     //  上一步
        private void button3_Click(object sender, EventArgs e)
        {
            if (i == 0)
            {
                i = imageList1.Images.Count - 1;
                pictureBox1.Image = imageList1.Images[i];

            }
            else
            {
                i = i - 1;
                pictureBox1.Image = imageList1.Images[i];
            }
        }
    } --------------------编程问答-------------------- 千万别听楼上两位说的,把图片放到ImageList:
1. 放到ImageList里,启动运行时是会占内存的,如果图片很多很大~~~~
2. ImageList里放的一般都是很小的图片,如果大图片扔进去,图片质量,大小都会被严重改造
3. 不明白为什么会想到放到ImageList里,就算说放到资源里,也比ImageList强太多 --------------------编程问答--------------------
引用 4 楼  的回复:

 public partial class Form1 : Form
  {
  int i=0;  
   
  public Form1()
  {
  InitializeComponent();
  }
  
  private void Form1_Load(object sender, EventArgs e)
  {
  //……

imageList 控件是不是要先拖到界面中啊?但是我试了一下,拖不进去 --------------------编程问答--------------------
引用 1 楼  的回复:
能不能重新表述下,没看懂。 最好带上一个 想要实现什么效果的草图

[img=http://b102.photo.store.qq.com/psb?/V10U5OhB09TBR0/ul.sk97egVUhmqo8TsWn8CTR7ni6qliD*Pb4iLDDth4!/b/YWK41jz9NAAAYrKa0zxtNQAA][/img]

--------------------编程问答--------------------
引用 5 楼  的回复:
千万别听楼上两位说的,把图片放到ImageList:
1. 放到ImageList里,启动运行时是会占内存的,如果图片很多很大~~~~
2. ImageList里放的一般都是很小的图片,如果大图片扔进去,图片质量,大小都会被严重改造
3. 不明白为什么会想到放到ImageList里,就算说放到资源里,也比ImageList强太多

大神可否贴些代码?? --------------------编程问答-------------------- 上班先 --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;

namespace WindowsFormsApplication1
{
    /// <summary>
    /// 改变图片委托,我又滥用委托了
    /// </summary>
    /// <param name="message"></param>
    public delegate void ChangeImageHandler(String message);

    public partial class Form1 : Form
    {
        private ShowPic _ShowPic;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _ShowPic = new ShowPic(pictureBox1);
            _ShowPic.ChangeImage += new ChangeImageHandler(ChangeImage);
            _ShowPic.Load(@"F:\Files\相片\2", SearchOption.TopDirectoryOnly);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 显示上一张图片
            _ShowPic.Last();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // 显示下一张图片
            _ShowPic.Next();
        }

        private void ChangeImage(String message)
        {
            // 改变图片事件
            this.Text = message;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (_ShowPic != null)
            {
                _ShowPic = null;
            }
        }
    }

    /// <summary>
    /// 显示图片类
    /// </summary>
    public sealed class ShowPic
    {
        /// <summary>
        /// 改变图片事件,我又滥用事件了
        /// </summary>
        public event ChangeImageHandler ChangeImage;
 
        /// <summary>
        /// 图片列表
        /// </summary>
        private String[] _ArrPicPath;

        /// <summary>
        /// 图片索引值
        /// </summary>
        private Int32 _Index;

        /// <summary>
        /// 要显示图片的PictureBox控件
        /// </summary>
        private PictureBox _PictureBox;

        /// <summary>
        /// 改变图片事件触发函数
        /// </summary>
        /// <param name="message"></param>
        private void OnChangeImage(String message)
        {
            ChangeImageHandler temp = Interlocked.CompareExchange<ChangeImageHandler>(ref ChangeImage, null, null);
            if (temp != null)
            {
                temp(message);
            }
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="pictureBox">PictureBox控件</param>
        public ShowPic(PictureBox pictureBox)
        {
            _PictureBox = pictureBox;
            _Index = 0;
        }

        /// <summary>
        /// 加载图片
        /// </summary>
        /// <param name="path">文件夹路径</param>
        /// <param name="searchOption">搜索参数</param>
        public void Load(String path, SearchOption searchOption)
        {
            if (!Directory.Exists(path))
            {
                OnChangeImage(path + " 路径不存在");
                throw new DirectoryNotFoundException(path + " 路径不存在");
            }

            // 获取文件夹下所有图片
            _ArrPicPath = System.IO.Directory.GetFiles(path,"*.jpg", searchOption);

            // 加载第一步图片
            LoadImage();
        }

        /// <summary>
        /// 上一张
        /// </summary>
        public void Last()
        {
            lock (_ArrPicPath)
            {
                if (_Index > 0)
                {
                    _Index--;
                }
                else
                {
                    OnChangeImage("已经是第一张");
                    return;
                }
            } 
            
            LoadImage();
        }

        /// <summary>
        /// 下一张
        /// </summary>
        public void Next()
        {
            lock (_ArrPicPath)
            {
                if (_Index < _ArrPicPath.Length - 1)
                {
                    _Index++;
                }
                else
                {
                    OnChangeImage("已经是最后一张");
                    return;
                }
            }

            LoadImage();
        }

        /// <summary>
        /// 加载图片到PictureBox
        /// </summary>
        private void LoadImage()
        {
            if (_ArrPicPath == null || _ArrPicPath.Length <= 0)
            {
                OnChangeImage("没有图片");
                return;
            }

            String path = _ArrPicPath[_Index];
            if (File.Exists(path))
            {
                _PictureBox.Load(path);
                OnChangeImage(path);
            }
        }
    }
}
--------------------编程问答-------------------- ceshi网络测试yyyyyyyyyyyyyyyyyyyyyy! --------------------编程问答--------------------  大牛能解释下,为什么imglist会占用很大的内存,而且会把图片质量拉下来? --------------------编程问答-------------------- 不解释 --------------------编程问答-------------------- 是在 _ShowPic.Load(@"F:\Files\相片\2", SearchOption.TopDirectoryOnly);
换上图片所在路径么?为什么我点击之后会出现:
_ShowPic.Last();   未将对象引用设置到对象的实例。 --------------------编程问答-------------------- 自己调试 --------------------编程问答--------------------   不理解 所以不解释! --------------------编程问答--------------------
引用 16 楼  的回复:
  不理解 所以不解释!


那你解释给我听嘛
--------------------编程问答-------------------- 比较简单的方法
LZ可以在打开小窗体的时候把图片地址放入一个string数组里面
在小窗体上面放一个picturebox ,根据传过来的图片地址显示图片,根据数组中index 上一张  下一张

--------------------编程问答--------------------
引用 14 楼 duduji 的回复:
是在 _ShowPic.Load(@"F:\Files\相片\2", SearchOption.TopDirectoryOnly);
换上图片所在路径么?为什么我点击之后会出现:
_ShowPic.Last();   未将对象引用设置到对象的实例。



我也是这个情况,请问怎么解决啊?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,