I populate my listview from a folder on my c drive; I need to add 2 buttons. A previous and next to navigate up or down. Can anybody give me some ideas on how the Prev and Next code will look like? I'm still a beginner so really would appreciate any help. I'm using Windows forms C#.
Thanks
Melger
Shahan AyyubPosted Dec 12, 2010, 1:22 PM
Please check this, I tested by the extension of your code it worked for me:
this is the code under partial Class Form1: Form
TextBox txtPicSelected = new TextBox(); //Your Textbox I didn't create it.
string Loc = @"C:\Users\Shahan\Pictures\"; //Global Variable
public Form1()
{
InitializeComponent();
PopulateListView();
listView1.MultiSelect = false;
listView1.Select();
listView1.Items[0].Selected = true;
}
private void PopulateListView()
{
string SelectView = "View." + txtPicSelected.Text;
listView1.View = View.List;
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Loc);
System.IO.FileInfo[] files = dirInfo.GetFiles("*.jpg");
if (files != null)
{
foreach (System.IO.FileInfo file in files)
{
ListViewItem item = new ListViewItem(file.Name);
item.SubItems.Add(file.FullName);
listView1.Items.Add(item);
txtPicSelected.Text = "0";
}
}
}
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
//lblNone.Visible = false;
ListViewItem selection = listView1.GetItemAt(e.X, e.Y);
if (selection != null)
{
string name = selection.ToString().Remove(0, 15).TrimEnd('}');
txtPicSelected.Text = name.ToString();
if (selection != null)
{
pbThump.Image = System.Drawing.Image.FromFile(selection.SubItems[1].Text);
}
}
}
private void Nextbtn_Click(object sender, EventArgs e)
{
int index = listView1.SelectedItems[0].Index;
if (index < listView1.Items.Count - 1)
{
listView1.Select();
listView1.Items[index + 1].Selected = true;
btnPrev.Enabled = true;
if((index = listView1.SelectedItems[0].Index) == listView1.Items.Count-1)
Nextbtn.Enabled = false;
}
else
Nextbtn.Enabled = false;
}
private void btnPrev_Click(object sender, EventArgs e)
{
int index = listView1.SelectedItems[0].Index;
if (index > 0)
{
listView1.Select();
listView1.Items[index - 1].Selected = true;
Nextbtn.Enabled = true;
if ((index = listView1.SelectedItems[0].Index) == 0)
btnPrev.Enabled = false;
}
else
btnPrev.Enabled = false;
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count !=0)
pbThump.Image = System.Drawing.Image.FromFile(Loc + listView1.SelectedItems[0].SubItems[0].Text);
}
Shahan AyyubPosted Dec 12, 2010, 4:06 PM
MelgerPosted Dec 12, 2010, 2:01 PM
Cool… you're a genius!!! It's perfect!! Thanks for all your help Shahan!!!
MelgerPosted Dec 12, 2010, 8:21 AM
Does anybody got some more advice for me?
Pleaaaaaaaaaaaaaaaaaase
Melger
MelgerPosted Dec 10, 2010, 4:17 AM
Thanks for the reply but unfortunately it does't work. If i slick on next it highlite the next in the list but not selecting it. prev highlite all in list backwards. Hey... could be me doing something stupid! Maybe I must not use the mouse down event!? Any ideas for me?
I populate my list box like:
private void PopulateListView()
{
string Location = @"..\..\Photos\";
string SelectView = "View." + txtPicSelected.Text;
listView1.View = View.List;
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Location);
System.IO.FileInfo[] files = dirInfo.GetFiles("*.jpg");
if (files != null) {
foreach ( System.IO.FileInfo file in files )
{
ListViewItem item = new ListViewItem(file.Name);
item.SubItems.Add(file.FullName);
listView1.Items.Add(item);
txtPicSelected.Text = "0";
}
}
}
Then on Mouse down event I display the selected picture in a Picturebox like:
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
lblNone.Visible = false;
ListViewItem selection = listView1.GetItemAt(e.X, e.Y);
if(selection != null)
{
string name = selection.ToString().Remove(0,15). TrimEnd('}');
txtPicSelected.Text = name.ToString();
if (selection != null)
{
pbThump.Image = System.Drawing.Image.FromFile(
selection.SubItems[1].Text);
}
}
}
Shahan AyyubPosted Dec 9, 2010, 4:06 PM
This is a simple demo that might help you or give you a start:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace NaviagtionListView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] str= System.IO.Directory.GetDirectories(@"C:\");
ListViewItem[] itemsarray = new ListViewItem[str.Length];
int i = 0;
foreach (string s in str)
{
itemsarray[i] = new ListViewItem();
itemsarray[i].Text = s;
i++;
}
listView1.Items.AddRange(itemsarray);
listView1.Items[0].Selected = true;
btnPrev.Enabled = false;
}
private void btnPrev_Click(object sender, EventArgs e)
{
int index = listView1.SelectedItems[0].Index;
if (index > 0)
{
listView1.Items[index-1].Selected = true;
listView1.Items[index - 1].Focused = true;
listView1.Select();
Nextbtn.Enabled = true;
if (listView1.Items[listView1.Items.Count - 1].Selected == true)
btnPrev.Enabled = false;
}
else
{
listView1.Items[0].Selected = true;
listView1.Select();
}
}
private void Nextbtn_Click(object sender, EventArgs e)
{
int index = listView1.SelectedItems[0].Index;
if (index < listView1.Items.Count - 2)
{
listView1.Items[index + 1].Selected = true;
btnPrev.Enabled = true;
listView1.Select();
if (listView1.Items[listView1.Items.Count - 1].Selected == true)
Nextbtn.Enabled = false;
}
else
{
listView1.Items[listView1.Items.Count - 1].Selected = true;
listView1.Select();
}
}
}
}