Entwickler-Ecke
WinForms - TopItem in gruppierten ListViews funzt nicht
marsmoon - Mo 07.04.08 15:55
Titel: TopItem in gruppierten ListViews funzt nicht
Hi,
habe folgendes Problem.
Ich möchte in einem ListView das TopItem abfragen.
Das funzt auch erstmal ganz gut. Wenn ich aber ein ListView mit Groups
benutze, dann erhalte ich immer den TopItem.Index = 0 zurück.
Ich benutze .net 2.0.
Kennt da jemand nen Trick um sich auch in gruppierten ListViews das TopItem zu merken?
Gruß marsmoon
Christian S. - Mo 07.04.08 16:19
Hallo und :welcome:
Wenn ich das richtig sehe, greift TopIndex auch nur auf eine Funktion der Windows-API zu. :nixweiss:
Was man machen kann ist sowas:
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6:
| for li : ListViewItem in listView1.Items do if li.Position.Y > 0 then begin MessageBox.Show(li.Text); exit; end; |
Wenn Du allerdings einen Header hast, musst Du nicht gegen 0 vergleichen, sondern gegen die Höhe des Headers. Die müsstest Du dann noch heraus bekommen.
Grüße
Christian
marsmoon - Mo 07.04.08 18:11
Hi,
danke für die schnelle Antwort. Leider werde ich daraus auch nicht schlau.
Deshalb zeige ich Euch mein Problem anhand eines Beispiels.
Einfach ne winform mit einem button erstellen.
Dann die class Form1 durch diese hier ersetzen.
Wenn man dann in dem ListView bis Eintrag 50 z.B. vorscrollt und dann den Button drückt,
wird das ListView komplett neu erstellt und die Pos 50 wird wieder angezeigt.
Wenn man aber das ganze mit einer Gruppe (hier Test) versucht dann springt er immer auf Pos 0.
Zum Testen mit einer Gruppe die Komentare lesen.
Wenn mir hier einer sagen kann wie ich in diese Zeile (merker = myListView.TopItem.Index;
) bei eingeschalteter Gruppierung den richtigen Wert bekomme oder wie ich diese Zeile umändern muss, dann ....
wäre ich zu ewigem Dank verpflichtet :-)
Beispiel:
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: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
| public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { InitializeListView(); } internal System.Windows.Forms.ListView myListView;
private void InitializeListView() {
myListView = new ListView(); myListView.Location = new System.Drawing.Point(20, 20); myListView.Width = 250;
myListView.View = View.Details;
this.myListView.Columns.Add("Key", 50, HorizontalAlignment.Left); this.myListView.Columns.Add("A", 100, HorizontalAlignment.Left); this.myListView.Columns.Add("B", 100, HorizontalAlignment.Left);
ListViewGroup gruppe = new ListViewGroup(); gruppe.Header = "Test";
for (int i = 0; i < 100; i++) { ListViewItem entryListItem = myListView.Items.Add("Items"); entryListItem.Text = "Items";
entryListItem.UseItemStyleForSubItems = false;
ListViewItem.ListViewSubItem expenseItem = entryListItem.SubItems.Add("Expense");
expenseItem.ForeColor = System.Drawing.Color.Red; expenseItem.Font = new System.Drawing.Font( "Arial", 10, System.Drawing.FontStyle.Italic);
ListViewItem.ListViewSubItem revenueItem = entryListItem.SubItems.Add("Revenue" + i);
revenueItem.ForeColor = System.Drawing.Color.Blue; revenueItem.Font = new System.Drawing.Font( "Times New Roman", 10, System.Drawing.FontStyle.Bold);
}
this.Controls.Add(this.myListView); } int merker = 0; private void button1_Click(System.Object sender, System.EventArgs e) { merker = myListView.TopItem.Index; myListView.Dispose(); InitializeListView(); myListView.TopItem = myListView.Items[merker]; } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
Christian S. - Mo 07.04.08 20:05
Dein Problem war mir schon klar, obiger Code-Schnipsel sollte Dir auch bei aktivierter Gruppierung den Index des TopItems liefern.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!