Zum Inhalt springen

Definitionsproblem


Chiacomo

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

"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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...