图片列表 , aardio调用ImageListView实现图片列表框功能

By admin at 2023-09-15 • 0人收藏 • 366人看过


ImageListView是一个功能丰富的图片列表库,适用于Windows Forms应用程序。它具有以下特点和功能:

  1. 多种视图模式:ImageListView支持多种不同的视图模式,包括大图标、小图标、平铺、详细信息等,可以根据需求进行选择。

  2. 图片缩略图和预览:ImageListView会自动生成图片的缩略图,并支持鼠标悬停预览功能,让用户能够更方便地浏览和选择图片。

  3. 拖放和重排序:用户可以通过拖放操作来改变图片的顺序,也可以将图片从其他应用程序中拖入到ImageListView中。

  4. 图片标签和描述:ImageListView支持每个图片添加标签和描述信息,方便用户查找和识别特定的图片。

  5. 图片操作和编辑:ImageListView提供了一些基本的图片操作,如旋转、裁剪和缩放等,还可以自定义图像处理器以进行更复杂的图像编辑。

  6. 事件和回调功能:ImageListView允许开发人员为每个操作和事件添加自定义的回调函数,方便处理用户的交互和操作。

总体而言,ImageListView提供了一个易于使用和定制的图片列表控件,使开发人员能够轻松地添加和管理图片列表功能,并提供了丰富的视图和交互选项,使用户能够更好地浏览和操作。


image.png

image.png

image.png

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/

import console
console.open()

import dotNet
import System.Windows.Forms;
import System.Drawing;

var ImageListviewdll = dotNet.loadFile("/ImageListView.dll");
var viewEnum = ImageListviewdll.import("Manina.Windows.Forms");
var imageListView1 = ImageListviewdll.new("Manina.Windows.Forms.ImageListView");
System.Windows.Forms.CreateEmbed(imageListView1,winform);

imageListView1.ShowFileIcons = true;
imageListView1.Columns.Add(viewEnum.ColumnType.Name);
imageListView1.Columns.Add(viewEnum.ColumnType.Dimensions);
imageListView1.Columns.Add(viewEnum.ColumnType.FileSize);
imageListView1.Columns.Add(viewEnum.ColumnType.FolderName);
imageListView1.Columns.Add(viewEnum.ColumnType.DateModified);
imageListView1.Columns.Add(viewEnum.ColumnType.FileType);

imageListView1.IntegralScroll = false;
imageListView1.AllowDuplicateFileNames = true;//允许重复文件
imageListView1.AllowDrop = true;//允许拖入
imageListView1.AllowDrag = true;//允许拖出
//imageListView1.ShowCheckBoxes = true;//显示多选框

//两种背景模板//Noir//Mandarin
imageListView1.Colors = viewEnum.ImageListViewColor.Default;


//0=Details 详细视图
//1=Gallery 画廊视图
//2=Pane 窗格视图
//3=Thumbnails 缩略图模式
//4=HorizontalStrip 水平带
//5=VerticalStrip 垂直带
imageListView1.View = viewEnum.View.Gallery;
//缩略图大小
imageListView1.ThumbnailSize = System.Drawing.Size(200, 200);

//清空列表
//imageListView1.Items.Clear();
// 禁用刷新, 用于图比较多的情况, 需要和ResumeLayout成对出现
//imageListView1.SuspendLayout();

//添加图片
imageListView1.Items.Add(io.fullpath("\images\4.jpg"));
imageListView1.Items.Add(io.fullpath("\images\3.jpg"));
imageListView1.Items.Add(io.fullpath("\images\4.jpg"));
imageListView1.Items.Add(io.fullpath("\images\3.jpg"));

// 恢复刷新, 用于图比较多的情况, 需要和SuspendLayout成对出现
//imageListView1.ResumeLayout();

//被点击事件
imageListView1.ItemClick = function(s,e){
	console.log("ItemClick")
	console.log(imageListView1.SelectedItems[1].Index)
}

//选择改变事件
imageListView1.SelectionChanged = function(s,e){
	console.log("SelectionChanged")
	//选择的数量
	console.log(imageListView1.SelectedItems.Count)
	if (imageListView1.SelectedItems.Count > 0)
    {
        //第一个被选中的图号
        var sel = imageListView1.SelectedItems[1];
        //序号,文件名,路径,大小...
        console.log(sel.Index ,sel.Text, sel.FileName, sel.FilePath ,sel.FileType ,sel.FolderName, sel.FileSize);

    }
}



winform.show();
win.loopMessage();


aardio工程打包:

Debug.zip



c#调用代码如下:

using Manina.Windows.Forms;
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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            imageListView1.MultiSelect = false;

            imageListView1.ShowFileIcons = true;
            imageListView1.Columns.Add(ColumnType.Name);
            imageListView1.Columns.Add(ColumnType.Dimensions);
            imageListView1.Columns.Add(ColumnType.FileSize);
            imageListView1.Columns.Add(ColumnType.FolderName);
            imageListView1.Columns.Add(ColumnType.DateModified);
            imageListView1.Columns.Add(ColumnType.FileType);


            imageListView1.IntegralScroll = false;
            imageListView1.AllowDuplicateFileNames = true;
            imageListView1.AllowDrop = true;
            imageListView1.AllowDrag = true;
            //imageListView1.ShowCheckBoxes = true;
            imageListView1.View = Manina.Windows.Forms.View.VerticalStrip;
            imageListView1.Colors = ImageListViewColor.Mandarin;

            //0=Details
            //1=Gallery
            //2=Pane
            //3=Thumbnails
            //4=HorizontalStrip
            //5=VerticalStrip

            imageListView1.View = Manina.Windows.Forms.View.Details;
            imageListView1.SelectionChanged += ImageListView1_SelectionChanged;
            imageListView1.ThumbnailSize = new Size(200, 200);
            imageListView1.ItemClick += imageListView1_ItemClick;

            imageListView1.Refresh();

        }
        private void ImageListView1_SelectionChanged(object sender, EventArgs e)
        {
            // 处理用户选择不同图片的操作
            Console.WriteLine("ImageListView1_SelectionChanged");
            ImageListViewItem sel = null;
            if (imageListView1.SelectedItems.Count > 0)
            {
                sel = imageListView1.SelectedItems[0];
                Console.WriteLine($"{sel.Index},{sel.FileName},{sel.FilePath},");
            }
        }
        private void imageListView1_ItemClick(object sender, ItemClickEventArgs e)
        {
            Console.WriteLine(e.Item.Index);
            Console.WriteLine(e.Location);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            imageListView1.Items.Clear();
            imageListView1.SuspendLayout();

            imageListView1.Items.Add(@"images\4.jpg");
            imageListView1.Items.Add(@"images\3.jpg");

            imageListView1.ResumeLayout();
        }
    }
}


3 个回复 | 最后更新于 2023-09-15
2023-09-15   #1

Thumbnails 缩略图模式 问题

上面的代码我是直接嵌入到的winform主窗体, 可以看到无论怎么放大缩小都没问题.

如果这个控件如果嵌入到custom中会有个问题: 当窗口托大和拖小的时候, 图片列表窗口会停止刷新显示一片空白, 当鼠标点击其内任意位置后, 图片框才能正常显示, 目前还不知道什么原因.

2023-09-15   #2

回复#1 @admin :

是不是需要写一个MainWindow_OnSizeChanged 事件触发一下刷新?

我在WPF里是通过这个事件修改宽度值,然后把WPF的ListView的宽度绑定到这个宽度值上,实现自动适配宽度。

private void MainWindow_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
    Wd = Width - 20;
}
<ListView x:Name="lv" ItemsSource="{Binding list}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal" Width="{Binding Wd}"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border Width="100" Height="100" Background="LightCoral" CornerRadius="30,30, 30,30">
                <TextBlock Text="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>


2023-09-15   #3

如果要用custom的话, 暂时用下面的代码解决吧

winform.disableDragFullWindow = true;
winform.custom.onPosChanged = function(flags,hwndInsertAfter,x,y,cx,cy){ 
	win.setTimeout(
		function(){
			imageListView1.Refresh();
		},20
	)
}


登录后方可回帖

登 录
信息栏
 非官方,私人站

本站域名

Aardio.com.cn

备用域名

ChengXu.XYZ

请相互转告!
投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方     |     Aardio官方更新日志
Sciter在线学习文档
才仁机械
Stm32cube中文网
Loading...