ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
1107
1107
EMPFEHLEN
-
20.07.07 13:11 #1
- Registriert seit
- Jun 2006
- Beiträge
- 18
Hi!
Ich habe in meinem Programm eine List Control in Report-Ansicht.
Das hinzufügen von Spalten und Items funktioniert Prima.
Problem 1:
Aber wenn ich alle Spalten Löschen will, bleiben immer welche übrig.
Hier der relevante Code:
Code :1 2 3 4 5
CHeaderCtrl* pHC = m_Messr_List.GetHeaderCtrl(); //Anzahl der Spalten ermitteln int nColCount = pHC->GetItemCount(); for (int i=0; i< nColCount; i++) m_Messr_List.DeleteColumn(i); m_Messr_List.InsertColumn(colum,"Messreihe",LVCFMT_LEFT,100);
Problem 2:
Wie kann ich die List Control so konfigurieren, dass beim Markieren eines Items die ganze Zeile markiert wird?
Problem 3:
Wie kann ich das letzte Element markieren und automatisch dort hin scrollen?
DankeGeändert von PinkoPalino (20.07.07 um 13:28 Uhr)
-
20.07.07 16:02 #2
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
Hallo,
1. Du löschst die Spalten von vorn. Dadurch verschiebt sich bei jedem Mal der Spalten-Index. Irgendwann übersteigt dann i die Anzahl der noch vorhandenen Spalten. Du mußt die Spalten von hinten beginnend löschen.
Allerdings bin ich mir nicht sicher, ob du wirklich die Spalten löschen willst. Denn in deinem Quelltext besorgst du dir die Anzahl der Items.Code :1 2
for (i=ColumnCount-1;i>=0;i--) m_Messr_List.DeleteColumn(i);
2.3.Code :1
m_Messr_List.SetExtendedStyle(LVS_EX_FULLROWSELECT);
Nicht ganz sicher bin ich mir, ob die markierte Zeile automatisch angezeigt wird.Code :1
m_Messr_List.SetSelectionMark(m_Messr_List.GetItemCount());
Mfg
langerGeändert von langer1801 (20.07.07 um 16:06 Uhr)
-
21.07.07 12:27 #3
- Registriert seit
- Jun 2006
- Beiträge
- 18
Laut diesem Beitrag:
http://www.tutorials.de/forum/visual...ermitteln.html
wird mit
die Anzahl der Spalten ermittelt.Code :1 2
CHeaderCtrl* pHC = m_Messr_List.GetHeaderCtrl(); //Anzahl der Spalten ermitteln int nColCount = pHC->GetItemCount();
Das mit
Habe ich bereits versucht (man muss bei GetItemCount noch -1 machen, damit letztes).Code :1
m_Messr_List.SetSelectionMark(m_Messr_List.GetItemCount());
Aber es wird in der Liste nicht angezeigt, dass das Letzte markiert wurde und auch nicht automatisch dort hin gescrollt. Aber das Item wird im Hintergrund ausgewählt.
gibt es irgendwie eine Möglichkeit, das markierte Item anzuzeigen?
Danke trozdem. Den anderen Code kann ich erst am Montag ausprobieren.
-
21.07.07 13:24 #4
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
Hallo,
da hast du recht mit dem Header-Control.
Und für das Selektieren geht vielleicht besser
Code :1
SetItemState(nIndex,LVIS_SELECTED, LVIF_STATE);
Mfg
langer
-
23.07.07 09:22 #5
- Registriert seit
- Jun 2006
- Beiträge
- 18
Also jetzt habe ich mal alles getestet:
Die Spalten muss man wie folgt löschen, da sich, wie langer1801 bereits erwähnte, die Spaltennnummer immer wieder nach vorne schiebt:
Code :1 2 3 4
CHeaderCtrl* pHC = m_Messr_List.GetHeaderCtrl(); //Anzahl der Spalten ermitteln int nColCount = pHC->GetItemCount(); for (int i=0; i< nColCount; i++) m_Messr_List.DeleteColumn(0);
Die gesamte Zeile wird jetzt beim Klicken auch markiert.
Aber das letzte Problem funktioniert leider noch nicht.
Mit dem Code
hat sich eigentlich nichts geändert.Code :1
SetItemState(nIndex,LVIS_SELECTED, LVIF_STATE);
Ich habe folgendes geschrieben:
Code :1 2 3
int nIndex = m_Messr_List.GetItemCount()-2; m_Messr_List.SetSelectionMark(nIndex); m_Messr_List.SetItemState(nIndex,LVIS_SELECTED, LVIF_STATE);
Aber leider wird die Auswahl nicht angezeigt.
Zusätzlich habe ich noch folgende Fragen:
4. Wenn man mehrere Elemente ausgewählt hat, wie bekommt man deren Indexe?
5. Wenn ich z.B: zwei ListConrtol auf meinem Formular habe, beim ersten etwas auswähle und dann beim zweiten klicke, wird die Markierung beim ersten gelöscht?! Warum. Kann man das irgendwie abstellen?
6. Welches Ereignis muss ich bei der ListConrtol auswählen, wenn ich auch darauf reagieren will, wenn der User mit den Pfeiltasten die Markierung ändert. Momentan funktionierts nur beim Klicken (Ich habe NM_CLICK ausgewählt)
DankeGeändert von PinkoPalino (23.07.07 um 10:21 Uhr)
-
Hallo,
habe was für deine 4-Frage
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
CListCtrl* pmyListCtrl = (CListCtrl*)GetDlgItem(IDC_PROPERTY_LIST); UINT i, uSelectedCount = pmyListCtrl->GetSelectedCount(); int nItem = -1; CString str; // Update all of the selected items. if (uSelectedCount > 0) { for (i=0; i < uSelectedCount; i++) { nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED); ASSERT(nItem != -1); //tu irgendwas mit dem Item } }
-
6. Welches Ereignis muss ich bei der ListConrtol auswählen, wenn ich auch darauf reagieren will, wenn der User mit den Pfeiltasten die Markierung ändert. Momentan funktionierts nur beim Klicken (Ich habe NM_CLICK ausgewählt)
Würde ich "LVN_ITEMCHANGED" nehmen,
dabei muss aber berücksichtigt werden, dass das Ereignis auch unter anderem
beim Einfügen der Items ausgelöst wird
-
mit5. Wenn ich z.B: zwei ListConrtol auf meinem Formular habe, beim ersten etwas auswähle und dann beim zweiten klicke, wird die Markierung beim ersten gelöscht?! Warum. Kann man das irgendwie abstellen?
pCtrl->SetExtendedStyle(..)
kannst du dein ListCtrl stylen.
Schau dir in der Online-Hilfe
LVS_EX_TRACKSELECT an
-
23.07.07 11:46 #9
- Registriert seit
- Jun 2006
- Beiträge
- 18
Hi titanic
Ich habe jetzt das für das 6. Problem versucht. Das müsste Funktionieren.
Zum 5. Problem habe ich auch versucht. Aber wenn ich pCtrl->SetExtendedStyle(LVS_EX_TRACKSELECT) verwende, funktioniert das FullRowSelect nicht mehr (es wird beim Klicken keine Markierung angezeigt), oder kann man zwei solche Styles kombinieren?
Weiters habe ich nachgesehen, was TrackSelect überhaupt macht. Hier der Text aus der Online-Hilfe:
Soweit ich das verstehe, wird damit nur ein Item autom. ausgewählt, wenn man sich länger darüber mit dem Mauszeiger befindet, oder löst das mein Problem 5?LVS_EX_TRACKSELECT
Version 4.70. Enables hot-track selection in a list-view control. Hot track selection means that an item is automatically selected when the cursor remains over the item for a certain period of time. The delay can be changed from the default system setting with a LVM_SETHOVERTIME message. This style applies to all styles of list-view control. You can check whether hot-track selection is enabled by calling SystemParametersInfo.
Das zu Problem 4 muss ich erst noch einbauen, aber das dürfte eigentlich funktionieren.
Danke
-
Hi,
Ja und zwar so:Zum 5. Problem habe ich auch versucht. Aber wenn ich pCtrl->SetExtendedStyle(LVS_EX_TRACKSELECT) verwende, funktioniert das FullRowSelect nicht mehr (es wird beim Klicken keine Markierung angezeigt), oder kann man zwei solche Styles kombinieren?
pCtrl->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT |
LVS_EX_TRACKSELECT );
Gruß
titanic
-
23.07.07 12:46 #11
- Registriert seit
- Jun 2006
- Beiträge
- 18
Durch diese Style änderung wird aber nur das Item autom. markiert.
Das eigentliche Problem ist aber, dass wenn die ListControl den Fokus verliert, geht die Markierung auch verloren.
Es sollte aber das Item Markiert bleiben.
-
24.07.07 15:17 #12
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
Um das Item zu markieren verwende
Code :1
m_MyListCtrl.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
und um die Markierung zu erhalten
Code :1
m_MyListCtrl.ModifyStyle(0,LVS_SHOWSELALWAYS);
Mfg
langer
-
24.07.07 15:35 #13
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
Und um zu Scrollen, kannst du folgenden Code verwenden:
Code :1 2 3 4 5 6
CSize size; CRect rect; m_MyListCtrl.GetItemRect(0,&rect,LVIR_BOUNDS); //ItemHöhe bestimmen size.cx=0; size.cy=rect.Height()*m_ctrListe.GetItemCount(); //oder statt GetCount ItemPosition angeben m_ctrListe.Scroll(size);
Anmerkung: Das funktioniert, um zum Ende zu Scrollen. Genau genommen muß man aber die Anzahl der Zeilen bestimmen, um die gescrollt werden soll und size.cy mit der Itemhöhe * AnzahlZeilen füllen.
Mfg
langerGeändert von langer1801 (24.07.07 um 15:59 Uhr)
-
25.07.07 08:28 #14
- Registriert seit
- Jun 2006
- Beiträge
- 18
@titanic && langer 1801
Danke!
Jetzt sind alle Probleme gelöst.
Grüße
Ähnliche Themen
-
Probleme mit ausrichten von list-style-image?
Von julchen im Forum CSSAntworten: 4Letzter Beitrag: 03.12.08, 17:19 -
List Control
Von shader09 im Forum C/C++Antworten: 1Letzter Beitrag: 29.11.07, 11:08 -
List Control
Von shader09 im Forum C/C++Antworten: 0Letzter Beitrag: 23.10.07, 13:16 -
List Control Steuerelement
Von bukem im Forum VisualStudio & MFCAntworten: 14Letzter Beitrag: 21.06.07, 15:43 -
ACL ( Access Control List) auslesen
Von kasmen im Forum JavaAntworten: 2Letzter Beitrag: 02.08.05, 09:14





Zitieren
Login






