Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hy Leute,

habe ein kleines Problem. Habe eine Funktion, die in einem Listview die Spaltenbreiten automatisch einstellt und dabei bekomme ich folgende Fehlermeldung:

Fehler beim Kompilieren: Sub oder Function nicht definiert

Markieret ist hierbei das Wort "TextWidth"

Hier ist die komplette Funktion:

Function ResizeListView(ByRef liste As ListView)

Dim itm As Long, si As Integer

Dim itmText As String

Dim subitmText As String

Dim LstCnt As Long

Dim txWidth As Long

Dim subtxWidth As Long

LstCnt = liste.ListItems.Count

For itm = 1 To LstCnt

itmText = liste.ListItems(itm).Text

txWidth = TextWidth(itmText) + (6 * 15)

If txWidth > lastwidth Then

lastwidth = txWidth

liste.ColumnHeaders(1).Width = lastwidth

End If

Next itm

LstCnt = liste.ListItems.Count

For si = 1 To UBound(txtWidth)

For itm = 1 To LstCnt

subitmText = liste.ListItems(itm).SubItems(si)

subtxWidth = TextWidth(subitmText) + (12 * 15)

If subtxWidth > txtWidth(si) Then

txtWidth(si) = subtxWidth

liste.ColumnHeaders(si + 1).Width = txtWidth(si)

End If

Next itm

Next si

End Function

Irgendwie kapiert er das nicht.

In der MSN ist diese Funktion allerdings drin!

Bitte um Hilfe!

Chiacomo

Geschrieben

Also, bei mir funktioniert es. Ich nehme an, du verwendest Version 6.0, oder? In der MSDN hab ich auch keine Hinweise gefunden. Schreib doch einfach mal ein kleines simples Proramm, welches testet, ob die Funktion wirklich nicht vorhanden ist.

Geschrieben

Hy,

bei mir funktioniert es nur dann, wenn ich es als sub oder function direkt im formular-code stehen habe. wenn ich es aber in einem modul habe, funktioniert das nicht. und ich kann mir nicht erklären warum.

Chiacomo

Geschrieben

Ganz einfach:

Wenn Du den Code in ein Modul auslagerst muss es heissen:


[...]

txWidth = Form1.ListView1.TextWidth(itmText) + (6 * 15)

[...]

subtxWidth = Form1.ListView1.TextWidth(subitmText) + (12 * 15)

Da das ListView für das Modul nicht per Default sichtbar ist. Wenn Du es in Eventfunktionen des ListView benutzt reicht einfach:

[...]

txWidth = TextWidth(itmText) + (6 * 15)

[...]

subtxWidth = TextWidth(subitmText) + (12 * 15)

Da das ListView in den Eventfunktionen per Default sichtbar ist. Wenn Du es im Formularquellcode benutzt, allerdings ausserhalb der Eventfunktionen des ListView muss es heissen:

[...]

txWidth = ListView1.TextWidth(itmText) + (6 * 15)

[...]

subtxWidth = ListView1.TextWidth(subitmText) + (12 * 15)

Da VB per default in der aktuellen Form nach einem Objekt ListView1 sucht.

Geschrieben
Ich habe die Funktion zwar in ein Modul ausgelagert, habe aber der Funktion 'byref' das Listview übergeben.

Chiacomo

Sorry, die Parameterübergabe habe ich übersehen. Du musst dann aber trotzdem das Attribut TextWidth vollqualifiziert ansprechen.


[...]

txWidth = liste.TextWidth(itmText) + (6 * 15)

[...]

'oder

With liste

    subtxWidth = .TextWidth(subitmText) + (12 * 15)

End With

Geschrieben

"textwidth" ist keine Methode des Listviews, sondern des Formulars. Ich habe jetzt das Formular und das Listview byref übergeben und jetzt funktionierts.

Wen Interessiert hier der komplette Code für das Modul:

' -----------------------------------------------------

Option Explicit

Dim txtWidth As Variant

Dim lastwidth As Long

Function ResizeListView(ByRef formular As Form, ByRef liste As ListView)

Dim itm As Long, si As Integer

Dim itmText As String

Dim subitmText As String

Dim LstCnt As Long

Dim txWidth As Long

Dim subtxWidth As Long

ReDim txtWidth(liste.ColumnHeaders.Count - 1)

LstCnt = liste.ListItems.Count

For itm = 1 To LstCnt

itmText = liste.ListItems(itm).Text

txWidth = formular.TextWidth(itmText) + (6 * 15) + 75

If txWidth > lastwidth Then

lastwidth = txWidth

liste.ColumnHeaders(1).Width = lastwidth

End If

Next itm

LstCnt = liste.ListItems.Count

For si = 1 To UBound(txtWidth)

For itm = 1 To LstCnt

subitmText = liste.ListItems(itm).SubItems(si)

subtxWidth = formular.TextWidth(subitmText) + (12 * 15) + 75

If subtxWidth > txtWidth(si) Then

txtWidth(si) = subtxWidth

liste.ColumnHeaders(si + 1).Width = txtWidth(si)

End If

Next itm

Next si

End Function

' -----------------------------------------------------

danke trotzdem

Chiacomo

:OD

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...