Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Listviewskola

Postad 2001-07-17 av Staffan Berg i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 5129, Betyg: 80%

Förord

Hej och välkomna till Listviewskolan. Jag har valt att skriva en kurs om den utmärkta kontrollen Listview eftersom den är väldigt flexibel och användbar i många sammanhang. Staffan Berg, email: staffan.b.berg@telia.com
Innehåll
  » Nytt projekt
  » Kommandoknappen Lägg till
  » Kommandoknappen Ta bort
  » Formulärets uppstart
  » Anrop till Windows API
  » Sortera listan
  » Söka i listan
Du hittar knappen för Listviewkontrollen i verktygslådan. Skulle den inte finnas framme högerklickar du någonstans i verktygslådan och väljer Components (alternativt samma menyval i Project-menyn). Bocka sedan för Microsoft Windows Common Controls för att lägga till kontrollen (med flera andra) i verktygslådan.
I följande exempel tänker jag använda Listviewkontrollen för att presentera ett enkelt telefonregister. Du kommer att mata in efternamn, förnamn och telefonnummer från tre textrutor. Jag använder sedan en textfil för att spara alla inmatade uppgifter i.


Nytt projekt

Starta upp ett nytt projekt och skapa en listviewkontroll med följande egenskaper:
General
View: 3 - lvwReport
Multiselect: True
Sorted: True
Width: 5535

Column Headers
1 - Efternamn
2 - Förnamn
3 - Telefon

Som ni säkert lade märke till valde jag i detta exempel ett visningsläge (3 - lvwReport) som är detsamma som visas som standard i utforskarens högra fönster. Jag väljer detta visningsläge för att jag tycker att Listviewkontrollen då kommer till sin fulla rätt med bäst översikt i kolumner över innehållet. De tre övriga visningslägena (0 - lvwIcon, 2 - lvwSmallIcon och 3 - lvwList) bör innehålla ikoner som är kopplade till en ImageList. En sådan koppling utförs under fliken Image Lists i Properties-rutan.

Skapa sedan tre textrutor och två kommandoknappar med följande namnegenskaper:
txtEfternamn
txtFornamn
txtTelefon
cmdLaggTill - Caption: Lägg till
cmdTaBort - Caption: Ta bort
Skapa också tre etiketter för textrutorna med lämpliga textinnehåll. Låt alla andra egenskapsvärden behålla sina standardvärden.
När du är klar med designen borde det se ut något i den här stilen.



Skapa nu en tom textfil med namnet Telefon.txt.
Nästa steg blir att lägga in Visual Basic-kod till formuläret och kommandoknapparna.


Kommandoknappen Lägg till

Vi börjar med att lägga in de namn och telefonnummer du skrivit i Listviewrutan och det gör vi genom att skriva in följande kod under knappen 'Lägg till'.


Private Sub cmdLaggTill_Click()
Dim f As Integer, strEfternamn as String, strFornamn as String
Dim strTele As String, itmX as ListItem, strApp as String

On Error GoTo Err
f = Freefile
strApp = App.Path

'Kontrollera först så att sökvägen inte slutar med en backslash
If Right(strApp, 1) <> "\" Then
strApp = strApp & "\"
End If

strEfternamn=txtEfternamn.Text
strFornamn=txtFornamn.Text
strTele=txtTelefon.Text

'Öppna textfilen för att lägga till text i slutet av den.
Open strApp & "telefon.txt" For Append As f
Write #f, strEfternamn, strFornamn, strTele

Close f

'Lägg till samma text i Listviewkontrollen
Set itmX = ListView1.ListItems.Add()
itmX.Text = strEfternamn
itmX.SubItems(1) = strFornamn
itmX.SubItems(2) = strTele
txtEfternamn.Text=""
txtFornamn.Text=""
txtTelefon.Text=""

Exit Sub
Err: MsgBox "Det blev något fel", 4, "Telefonlista"
End Sub


Kommandoknappen Ta bort

Koden som kommer ett läggas till under cmdTaBort raderar alla markerade rader i Listviewkontrollen. Sedan skrivs det återstående innehållet i Listview1 in i textfilen.


Private Sub cmdTaBort_Click()
Dim filnr As Integer, itm As ListItem
Dim n As Integer, svar As Integer, strApp As String

strApp = App.Path
If Right(strApp, 1) <> "\" Then
strApp = strApp & "\"
End If

On Error GoTo Err

'Ta bort markerade item
If ListView1.SelectedItem Is Nothing Then Exit Sub
For i = ListView1.ListItems.Count To 1 Step -1
If ListView1.ListItems(i).Selected = True Then
ListView1.ListItems(i).Ghosted = True
ListView1.ListItems.Remove (i)
End If
Next i

filnr = FreeFile
'Skriv in återstoden av item i en textfil.
Open strApp & "telefon.txt" For Output As filnr
For Each itm In ListView1.ListItems
With itm
Write #filnr, .Text, .SubItems(1), .SubItems(2)
End With
Next

Close filnr

txtEfternamn.Text = ""
txtFornamn.Text = ""
txtTelefon.Text = ""

Exit Sub
Err: MsgBox "Det blev något fel", 4, "Telefonlista"
End Sub


Formulärets uppstart

Det första som händer när formuläret laddas är att textfilen med dess innehåll läses in i listviewkontrollen. Koden som läses in ser ut så här:


Private Sub Form_Load()
Dim itmX As ListItem
Dim f As Integer
Dim strEfternamn As String, strFornamn As String, strTele As String, strApp As String

strApp = App.Path

If Right(strApp, 1) <> "\" Then
strApp = strApp & "\"
End If

f = FreeFile

'Läs in textfilen och fyll listviewkontrollen.
Open strApp & "telefon.txt" For Input As f
Do While Not EOF(f)
Input #f, strEfternamn, strFornamn, strTele

Set itmX = ListView1.ListItems.Add()
itmX.Text = strEfternamn
itmX.SubItems(1) = strFornamn
itmX.SubItems(2) = strTele

Loop

Close f

End Sub



Anrop till Windows API

När man markerar en rad i en listviewkontroll med flera kolumner blir endast elementet i den första kolumnen markerad. Det kan vara snyggare och mer lättarbetat om hela raden blev markerad istället. För att göra detta möjligt krävs det att man skriver ett s k API-anrop. Har du tillgång till VB 6.0 eller senare versioner behöver du bara bocka för rutan FullrowSelect under General. För VB 5 och tidigare versioner tillämpas följande kod.
Placera följande kod i en modul:


Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Const LVM_FIRST = &H1000
Public Const LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54
Public Const LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55
Public Const LVS_EX_FULLROWSELECT = &H20

Lägg sedan till nedanstående kod i Form_Load().


rStyle = SendMessageLong(ListView1.hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0&, 0&)
rStyle = rStyle Or LVS_EX_FULLROWSELECT
r = SendMessageLong(ListView1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, rStyle)







På höger skärmdump ovan ser ni exempel på vad API-anropet åstadkommer.



Sortera listan

Under fliken Sorting under Properties (eller i egenskapsfältet) hittar du egenskaperna SortOrder och SortKey.
Gör så här för att ställa in önskade sorteringsegenskaper:

n Sätt egenskapen SortOrder till antingen lvWAscending (0) för att sortera i stigande ordning eller lvWDescending (1) för att sortera i fallande ordning.

n Ange vilket SubItem-objekt som du vill sortera med avseende på genom att sätta egenskapen SortKey antingen till ett tal för ett av SubItem-objekten eller till 0 för att sortera med avseende på objektets text.

Naturligtvis måste Sorted vara förbockad under Generalfliken eller i egenskapsfältet.


Söka i listan

Du kan implementera en sökfunktion för en Listviewkontroll med metoden FindItem. Den här metoden söker efter text i objektens textegenskap, tag-egenskap eller i ett av dess underobjekt (SubItem). I metodens (.FindItem) andra argument specificerar du efter vilken egenskap sökningen skall ske.








KonstantVärdeBeskrivning
lvwText0Söker igenom egenskapen Text
lvwSubItem1Söker igenom egenskapen SubItems
lvwTag2Söker igenom egenskapen Tag


Här följer ett exempel på hur metoden FindItem kan tillämpas.


Private Sub cmdSök_Click()

Dim itmX as ListItem

If IsNull(txtSök) Then
Exit Sub
End If

Set itmX = Listview1.FindItem(txtSök.Value, lvwText, , lvwPartial)
If itmX Is Nothing Then
MsgBox "Listposten hittades inte!"
Exit Sub
End If

itmX.Selected = True
Listview1.Refresh

End Sub

Det sista argumentet i metoden FindItem anger jämförelsemetod som ska användas om sökningen görs med avseende på egenskapen Text. Använd lvwWholeWord (0) för att matcha det första hela ordet i textsträngen eller lvwPartial (1) för att matcha en delsträng som startar i början av texten.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
867
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies