图片列表 , aardio调用ImageListView实现图片列表框功能
ImageListView是一个功能丰富的图片列表库,适用于Windows Forms应用程序。它具有以下特点和功能:
多种视图模式:ImageListView支持多种不同的视图模式,包括大图标、小图标、平铺、详细信息等,可以根据需求进行选择。
图片缩略图和预览:ImageListView会自动生成图片的缩略图,并支持鼠标悬停预览功能,让用户能够更方便地浏览和选择图片。
拖放和重排序:用户可以通过拖放操作来改变图片的顺序,也可以将图片从其他应用程序中拖入到ImageListView中。
图片标签和描述:ImageListView支持每个图片添加标签和描述信息,方便用户查找和识别特定的图片。
图片操作和编辑:ImageListView提供了一些基本的图片操作,如旋转、裁剪和缩放等,还可以自定义图像处理器以进行更复杂的图像编辑。
事件和回调功能:ImageListView允许开发人员为每个操作和事件添加自定义的回调函数,方便处理用户的交互和操作。
总体而言,ImageListView提供了一个易于使用和定制的图片列表控件,使开发人员能够轻松地添加和管理图片列表功能,并提供了丰富的视图和交互选项,使用户能够更好地浏览和操作。



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工程打包:
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();
}
}
}回复#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>登录后方可回帖
Thumbnails 缩略图模式 问题
上面的代码我是直接嵌入到的winform主窗体, 可以看到无论怎么放大缩小都没问题.
如果这个控件如果嵌入到custom中会有个问题: 当窗口托大和拖小的时候, 图片列表窗口会停止刷新显示一片空白, 当鼠标点击其内任意位置后, 图片框才能正常显示, 目前还不知道什么原因.