Frage

Ich bin wirklich kämpfen, mit etwas hier. Ich habe eine Klasse-Modul, nennen wir es FormMan, die eine Reihe von Methoden, die sich auf die große Anzahl von Userforms hat ich in meinem Projekt. Ein besonderes Verfahren ist von vielen verschiedenen Orten aufgerufen werden und ist ziemlich einfach -. Es fügt einfach eine benutzerdefinierte Anzahl von Steuerelementen zu einem Formular und erweitert die Formen Höhe dieser neuen Kontrollen aufzunehmen

Der Benutzer übergibt die Anzahl der Kontrollen und die Userform.

oF.AddControlsToForm iNumberOfControls,frmTest

In FormMan Klassenmodul:

Public Sub Addcontrols(iNum as integer, oForm as userform)

//stuff happens here, oForm is used extensively

oForm.Height = i  //object does not support this property or method
frmTest.Height = i //works

oForm.Show //object does not...
frmTest.show  //works

end sub

In den Lokalfenstern nicht oForm nicht eine Höhe Eigenschaft hat, so fair genug. Aber oForm wurde als frmTest definiert. Ich kann oForm.BackColor = vbred sagen, und ich kann ctl = oform.TextBox1 zum Beispiel gesetzt

Dies soll ein generisches Verfahren sein, die eine Reihe von Kontrollen zu welcher Form auch immer hinzufügen können. Ich habe versucht, Laden und die Form zeigt, bevor es zu oForm zuweisen.

Warum sind in der Höhe und zeigen Eigenschaften und Methoden von Userforms, aber nicht von Objekten als Userforms erklärt? Was mache ich falsch?

wirklich zu schätzen jede Hilfe.

War es hilfreich?

Lösung

Das Problem hierbei ist, dass die Userform und frmTest Objekte sind nicht vom gleichen Typ. In der Tat ist frmTest ein Subtyp von Userform, die es durch Hinzufügen der Höhe Anwesen erstreckt sich unter anderem Mitgliedern.

Sie werden wahrscheinlich zu erklären, Ihre Funktionsparameter als Objekt zurückgreifen müssen.

Public Sub Addcontrols(iNum as integer, oForm as Object)

Das sollte funktionieren, wie Sie wünschen, wenn auch leider werden Sie Typsicherheit opfern. Die meisten OO-Konzepte sind in der Regel auseinander im Zusammenhang mit VBA fallen.

Andere Tipps

Die Sache in erster Linie um VBA zu erinnern ist, dass es quasi-OO, nicht voll-OO. Ich habe, um dieses Problem in eine Menge verrückter Probleme laufen und so neige ich dazu, jetzt zu vermeiden, ganz auf VBA Konsistenz angewiesen zu sein.

Dass gesagt wird, versuchen Sie dies aus:

Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
   .Height = x
   .Show
End With

Ist es nicht so angenehm bizarr?!?! Ich habe kein Codebeispiel bereit habe und warten, so kann ich nicht den Erfolg garantieren, aber das fühlt sich an wie der richtige Ansatz ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top