图片列表 , 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中会有个问题: 当窗口托大和拖小的时候, 图片列表窗口会停止刷新显示一片空白, 当鼠标点击其内任意位置后, 图片框才能正常显示, 目前还不知道什么原因.