Autor Beitrag
alegria
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Do 06.08.09 14:24 
Also... Man nehme einen button und ein listview. Bei letzterem fügt man drei spalten hinzu und setzt "CheckBoxes" auf True. 2 Pseude pdfs auf C:\ erstellen und final nur noch den unten steheneden Code kopieren.

Meine Frage:
Warum funktioniert der button event nicht bzw. warum wird nicht der Checked = true Zustand in meiner itemList gespeichert und deswegen letztlch nicht im listview angezeigt???

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
public partial class Form1 : Form
    {
        public List<Item> itemList = new List<Item>();

        public Form1()
        {
            InitializeComponent();
            
            itemList.Add(new Item(@"C:\test1.pdf"));
            itemList.Add(new Item(@"C:\test2.pdf"));

            ListToListView();
        }

        public void ListToListView() {
            listView1.Items.Clear();
            for (int i = 0; i < itemList.Count; i++)
                listView1.Items.Add(itemList[i].lvItem as ListViewItem);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            itemList[1].lvItem.Checked = true;
            ListToListView();
        }
        
        public class Item
        {
            public Item(string fileName)
            {
                File = new FileInfo(fileName);
            }


            public FileInfo File { get; private set; }

            public ListViewItem lvItem
            {
                get
                {
                    return
                        new ListViewItem(new string[]{
                    (File.Name.Remove(File.Name.Length-4)).Substring(File.Name.LastIndexOf('\\')+1),
                    (File.Length / 1024).ToString() + " KB",
                    (File.LastWriteTime.ToString())
                    }, File.Extension.Equals(".pdf") ? 0 : 1);
                }
            }

        }

    }
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 06.08.09 17:03 
Weil deine Property jedes Mal eine neue ListViewItem-Instanz zurückgibt. Fülle die Property wie "File" einmalig im Konstruktor.

_________________
>λ=
alegria Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 07.08.09 08:50 
Zitat:
Fülle die Property wie "File" einmalig im Konstruktor.

Mmhhh... Also ich vermute mal ich soll bei
ausblenden C#-Quelltext
1:
2:
3:
4:
public Item(string fileName)
            {
                File = new FileInfo(fileName);
            }

noch lvItem hinzufügen?
Mach ich das so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public Item(string fileName)
        {
            File = new FileInfo(fileName);
            lvItem = new ListViewItem();
        }

bekomme ich einen Fehler:
Einer Eigenschaft oder einem Indexer "AASG.Item.lvItem" kann nichts zugewiesen werden -- sie sind schreibgeschützt.

Also dachte ich, muss ich ein set{} noch bei public ListViewItem lvItem hinzufügen. Nur dann klappt es leider immer noch nicht!

Was mach ich falsch???
alegria Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 07.08.09 15:14 
Na gut! Nach stundenlangem rumprobieren war die Erkenntnis dann da! ;) Danke für den Tipp...

Die "richtige" Klasse:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public class Item
        {
            public Item(string fileName)
            {
                File = new FileInfo(fileName);
                lvItem = new ListViewItem(new string[]{
                    (File.Name.Remove(File.Name.Length-4)).Substring(File.Name.LastIndexOf('\\')+1),
                    (File.Length / 1024).ToString() + " KB",
                    (File.LastWriteTime.ToString())
                    }, File.Extension.Equals(".pdf") ? 0 : 1);               
            }

            public FileInfo File { get; private set; }
            public ListViewItem lvItem { get; private set; }

        }