![](/img/trans.png)
[英]Show filename in listView and imagelist. Show filename of selected item
[英]Filling Listview & Imagelist selected item confusion c#
我是編程和C#的新手,似乎已經讓自己陷入了上述困境。 我想要做的是創建一個客廳媒體電腦的前端沒有什么可以開始的,因為我明白這是一個像我這樣的完全noobie的媽媽的任務。 我已經拍完了,完全可以使用外部exe,存儲/加載資源......並且對我2周沖浪的結果非常滿意。
所以我開始我的項目只是啟動一個模擬器開始,我想要做的是掃描文件夾中的zip文件和圖像文件,如果找到匹配的圖像和zip文件,它會在列表視圖中顯示每個拉鏈發現。
所以我填充這樣的列表框,讓我的2個列表框顯示我想看的東西。
PopulateListBox(listBox1, "\\SomePath\\", "*.zip");
PopulateListBox(listBox2, "\\Images\\", "*.jpg");
private void PopulateListBox(ListBox lsb, string Folder, string FileType)
{
DirectoryInfo dinfo = new DirectoryInfo(Folder);
FileInfo[] Files = dinfo.GetFiles(FileType);
foreach (FileInfo file in Files)
{
lsb.Items.Add(file.Name);
}
}
所以我現在有了我的2個列表框,可以看到我有game1.zip和game1.jpg,現在我可以使用game1圖像填充我的listview並啟動他說簡單的模擬器。
這就是我目前填充列表視圖的方式。
PopulateListView();
private void PopulateListView()
{
if (listBox1.Items.Contains("game1.zip"))
{
if (File.Exists("\\Images\\game1.jpg"))
{
imageList1.Images.Add(Image.FromFile("\\Images\\game1.jpg"));
listView1.Items.Add("", 0);
}
}
if (listBox1.Items.Contains("game2.zip"))
{
if (File.Exists("\\Images\\game2.jpg"))
{
imageList1.Images.Add(Image.FromFile("\\Images\\game2.jpg"));
listView1.Items.Add("", 1);
}
}
}
這就是我目前正在推出的方式,它運作正常。
// launch item
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (listView1.Items[0].Selected == true)
{
string rom = "\\" + listBox1.Items[0].ToString();
// Launch code in here
}
if (listView1.Items[1].Selected == true)
{
string rom = "\\" + listBox1.Items[1].ToString();
// Launch code in here
}
}
那你可能會問什么問題? 而不是繼續輸入每個項目的所有信息我想要使用某種聲明,如果可能,我不知道搜索哪些沒有幫助。 圖像名稱將始終與zip名稱匹配,只需要松開文件擴展名,以便填充listview這樣的東西。
if (listbox1 item = listbox2 item)
{
add to imagelist and listview automaticly with same index
}
然后我希望能夠使用這樣的東西啟動。
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
string rom = "\\" + listview.selected.item.tostring;
// Launch code in here
}
希望我在我的智慧結束時有意義。
問候
德里克
如果我理解正確,您希望以編程方式讀取,匹配和顯示所有相同的圖像和拉鏈,以及當用戶單擊列表視圖行以啟動ROM時。 這可以按如下方式完成:
代碼:
public ListForm()
{
InitializeComponent();
// path to images and roms
const string location = @"d:\temp\roms\";
// bind image list with list view
listViewControl.SmallImageList = imageList;
// get all images without extension
var images = System.IO.Directory.GetFiles(location, "*.gif").Select(f => System.IO.Path.GetFileNameWithoutExtension(f)).ToList();
// get all roms without extension
var zips = System.IO.Directory.GetFiles(location, "*.zip").Select(f => System.IO.Path.GetFileNameWithoutExtension(f)).ToList();
// find all entries (images and zips) that have the same name
var matching = images.Intersect(zips);
var imageIndex = 0;
// fill image list and list view at the same time and store rom location
foreach (var match in matching)
{
// path to file without extension
var file = System.IO.Path.Combine(location, match);
// add image to image list
imageList.Images.Add(match, Bitmap.FromFile(string.Format("{0}.gif", file)));
// create list view item
var lvi = new ListViewItem(match);
// and set list view item image
lvi.ImageIndex = imageIndex;
// store rom location
lvi.Tag = string.Format("{0}.zip", file);
imageIndex++;
// and show
listViewControl.Items.Add(lvi);
}
}
private void listViewControl_MouseClick(object sender, MouseEventArgs e)
{
// when user clicks an item, fetch the rom location and go
var item = listViewControl.GetItemAt(e.X, e.Y);
if (item != null)
{
var pathToRom = item.Tag as string;
// do something with rom ...
}
}
無需單獨處理圖像列表和列表視圖。 輸出如下:
如果我正確理解你的問題,你可以用以下方法切換你的if
語句塔:
var item = listView1.SelectedItem
string rom = "\\" + item.ToString()
// Launch code in here
並填充它,你可以改變這個:
if (listBox1.Items.Contains("game2.zip"))
{
if (File.Exists("\\Images\\game2.jpg"))
{
imageList1.Images.Add(Image.FromFile("\\Images\\game2.jpg"));
listView1.Items.Add("", 1);
}
}
對此:
List<string> files = new List<string> { "game1.zip", "game2.zip" };
var index = 0;
foreach (var file in files)
{
if (File.Exists("\\Images\\" + file))
{
imageList1.Images.Add(Image.FromFile("\\Images\\" + file.Replace(".zip", ".jpg")));
listView1.Items.Add("", index);
index++;
}
}
您可以使用listView中的名稱填充圖像:
private void PopulateListView()
{
foreach (string curr in listBox1.Items)
{
string changed = "\\Images\\" + curr.Replace(".zip", ".jpg");
if (File.Exists(changed))
{
imageList1.Images.Add(Image.FromFile(changed));
listView1.Items.Add("", 1);
}
}
}
並使用MouseDoubleClick
事件中的選定項目
// launch item
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
string selected = (string) listBox1.SelectedItem;
string rom = "\\" + selected;
// Launch code in here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.