05. februar 2002 - 10:21Der er
20 kommentarer og 1 løsning
Object oprettelse !!!
Hejsa
Jeg har et problem med oprettelse af diverse objecter. Det jeg gerne vil opnå er at jeg ikke skal angive et bestemt objectnavn og klasse. Således at jeg f.eks udfra det der peges på i et listview kan oprette et bestemt object, se kode nedenuden.
------------------------------------------------------ Function OpretJobObject() Dim obj As String Dim cls As String obj = "obj" & lstview1.SelectedItem.SubItems(2) cls = "cls" & lstview1.SelectedItem.SubItems(2) Set obj = New cls End Function --------------------------------------------------------
obj og cls indeholder f.eks "objtest1" og "clstest1", klassen clstest1 findes naturligvis. Dette fungere ikke da obj og cls er Strings, men hvis jeg ændre dem til henholdsvis :
Sub OpretJobObject(Obj As Object) Select Case lstview1.SelectedItem.SubItems(2) Case "objtest1" Set obj=New objtest1 Case "clstest1" Set obj=New clstest1 End Select End Sub
Jeg vil gerne undgå en select case, da der løbene vil blive tilføjet nye klasser. Så jeg vil gerne undgå at jeg skal ind og rette i min select case hver gang.
Creates and returns a reference to an ActiveX object.
Syntax
CreateObject(class,[servername])
The CreateObject function syntax has these parts:
Part Description
class Required; Variant (String). The application name and class of the object to create.
servername Optional; Variant (String). The name of the network server where the object will be created. If servername is an empty string (""), the local machine is used.
The class argument uses the syntax appname.objecttype and has these parts:
Part Description appname Required; Variant (String). The name of the application providing the object. objecttype Required; Variant (String). The type or class of object to create.
VB genkender ikke createobject (obj & "." & cls") (Står med rødt)
Mit listview indholder bare et tilfældig navn (string) som mit object (obj)skal hedde. Mht. cls så angiver listviewet navnet på den klasse som jeg vil oprette mit object udfra.
Jeg har prøvet med Set Someobj = CreateObject(cls) Hvor cls = "clsTest1" altså navnet på min klasse
Men får fejlen Can't create object.
Benny når du skriver Set SomeObj = CreateObject(obj & "." & cls), vil det så ikke give mig en fejl da systax jo er CreateObject(class,[servername]) og der jo så vil stå:
Det vil ikke give en fejl, da servername er optional. Er den udeladt, oprettes på lokalmaskine.
Dette fremgår også af det udsnit af MSDN, jeg gav omkring CreateObject.
Din fejl opstår fordi, du ikke kan nøjes med klassenavnet. Du skal også have modulnavnet med, og modulnavnet er navnet på den fil (dll eller ocx), som indeholder klassen.
Hvis det hele ligger i samme projekt, hvad er så problemet? Du skal alligevel rette i projektet for at tilføje en ny klasse. Så er det heller ikke det store ekstraarbejde at tilføje den i en Select Case.
Hvis du lægger dine klasser i en ActiveX.DLL kan du runtime læse typelibrariet fra filen.
Prøv følgende:
Lav din dll og compile den som ActiveX.dll
Lav et nyt vbprojekt hvor du under references refererer til "Typelib Information"
Nu kan du gøre følgende: Dim obj As Object Dim X As TypeLibInfo Dim Y As CoClasses Dim i As Integer Set X = TypeLibInfoFromFile("c:\dindll.dll") Set Y = X.CoClasses
For i = 1 To Y.Count Set obj=CreateObject(Y(i).Parent & "." & Y(i).Name) 'Lav en instans af objektet Next i
/Jennemaan
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.