[VB .Net 2005] User Control


AvalanchRider

Grünschnabel
Hallo,

Ich habe ein komplexes User-Control erstellt welches eine Digital Camera Canon G6 über eine SDK von Canon und einen zugehörigen Wrapper, weil die CanonSdk (cdsdk.dll) eigentlich nur für Visual C++ ist, anspricht. auf dem User-Control sind mehrere Buttons ein Panel um den Viewfinder anzuzeigen und ein eine Picturebox drauf, das ist aber relativ uninteressant weil das Control im Eigentlichen Sinne ja einwandfrei funktioniert.

In dem Control gibt es eine Klasse Camera die, die Properties und Methoden und alles drum und dran, der Camera zur Verfügung stellt.

Der CanonSDK wird der Software zur Verfügung gestellt in dem Man die libs verlinkt, wurde über den Wrapper gemacht. Und Die Dlls/exes(12. Stk, hauptsächlich Cdsdk.dll) in den Ordner kopiert wo das Projekt dann ausgeführt wird also ..\Projekt\bin\debug or release.

Wenn ich dieses Control nun auf die Form des Eigentlich Projektes ziehe funktioniert das auch recht gut man sieht alles kann alles einstellen und so. Auch zur Laufzeit gibt es keine Probleme. Wenn ich allerdings in den Designer zurück kehre kommt ein Fehler.
Unable to load cdsdk.dll, auf diese Datei wird eigentlich in dem Camera-Control über die
Dll-Import Funktion zugegriffen. Also nur zur Laufzeit eingebunden. Weil es keine Com Componente ist, kann auch keine Referenz darauf gesetzt werden, wird ja auch nicht wirklich benötigt.

Ein weiteres „Problem“ ist:
das ein weiteres Objekt von der Klasse Camera instanziert wird allerdings für die Form in der *.designer.vb Datei in der InitializeComponent().
Das sieht ungefähr.
Code:
Dim Camera1 As New CanonSDK.Camera
weiter unten:
Code:
'
'Fotostation1
'
Camera1.ExposureCompensation = 0
Camera1.FlashMode = 0
Camera1.ISOSpeed = 0
Camera1.PhotoEffect = 0
Camera1.ShootingMode = 0
Camera1.ZoomPos = 0
Me.Fotostation1.camera = Camera1
Kann mir jemand sagen ob das normal ist.
Fotostation1 ist das Control selbst.

Da entseht der Fehler:
"Object of type 'CanonSDK.Camera' cannot be converted to type 'CanonSDK.Camera'."

Grüße AvalanchRider
 

Christian Kusmanow

Erfahrenes Mitglied
Hi!

Setz dein Property Fotostation.Camera entweder auf Browseable( false ).
(Somit verhinderst, dass der Designer resourcen für dieses Property erstellt)
C#:
[Browsable ( false )]
public CanonSDK.Camera Camera{
	get { return camera ; }
	set { camera = value; }
}

Oder schau Dir mal das Component.DesignMode Property an.
Damit kannst auf den DesignModus reagieren und bestimmte Sachen nicht machen...
 

AvalanchRider

Grünschnabel
ja danke schön,
nur weiß ich leider Component.DesignMode Property finde ich komme ja nicht an mein Formular das verhindert der Designer wegen dem Fehler(2), sag ich mal.

und:
  1. [Browsable ( false )]
  2. public CanonSDK.Camera Camera{
  3. get { return camera ; }
  4. set { camera = value; }
  5. }
Wie geht das?
In der Klasse des Controls oder auf der Form wo das Control eingebunden wird?:confused:
 
Zuletzt bearbeitet:

Christian Kusmanow

Erfahrenes Mitglied
Weisst Du was ein Property ist? Wenn nicht, sofort über möglichkeiten von VB und die Basics von OOP schlau machen.
Du findest alle Grundlegenden Infos ind den MSDN Casts. Intensiv durcharbeiten. Ist ja nur zuschauen. :)
C#:
class Fotostation
{
	// Privates Member der Klasse Fotostation
	CanonSDK.Camera camera;

	// Schnittstelledifintion für das private Member Fotostation.camera
	[Browsable ( false )]
	public CanonSDK.Camera Camera{
		get { return camera ; }
		set { camera = value; }
	}
}
Btw. hab ich keine Ahnung die ein Property in VB definiert wird. Hab zeitig zu C# gewechselt. Such mal hier im Forum nach VB und Property.
 

AvalanchRider

Grünschnabel
Ja ich weiß was Properties sind.
Die Klasse Camera wird in einer anderen Datei die sich Camera.cs nennt definiert.
da ist der Namespace CanonSDK drin und dieser enthält die Klassendefinition.
In dem Vb Projekt was das Control ist wird ein Objekt instantziert welches unglücklicherweise genau wie die Klasse heißt. Und dann versucht das Formular auf welches das Control eingebunden ist wiederum die Fotostation.Camera Properties zu setzen. Das komische ist ja das er auf der Form versucht selbst ein Camera-Objekt (Camera1) anzulegen. "ist das normal"?
 

Christian Kusmanow

Erfahrenes Mitglied
Hmm, Du hast dann anscheinend ein Referenzproblem. Bzw. erkennt das VS bestimmt die Namespaces nicht richtig.
Benenne den Klassennamen des CanonSdk Cameraobjekts mal um. Vielleicht hilft das.
C#:
using CanonCamera = CanonSDK.Camera;
Achte generell darauf das Du doppelte Namen vermeidest.
Wenn es nicht anders geht, musst die Klassennamen halt umbenennen.
 

AvalanchRider

Grünschnabel
Hmm...
ja das habe ich mir auch schon gedacht, aber was mich ebend stark verwundert ist das es bei der Ausführung keine Probleme gibt nur wenn ich in den Formulardesigner gehe, kommt der Fehler.

Code:
   Object of type 'CanonSDK.Camera' cannot be converted to type 'CanonSDK.Camera'.  
Hide    
   
at  System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component,  Object value)
at  System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager  manager, CodeAssignStatement statement)
at  System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager  manager, CodeStatement statement)
Es steht keine Zeilen Nummer dabei, noch nichtmal ein Fehler in der Errorlist.

ich glaube es kommt duch diese Zeile,
Code:
Dim Camera1 As New CanonSDK.Camera
die vom Designer erstellt wird.

weiter unten wird diese Zeile erstellt:
Code:
Me.Fotostation1.camera = Camera1

Das verstehe ich am allerwenigsten wieso das zugewiesen wird?

Habe ich auch schon bei dem ersten beitrag ausführlicher geschrieben.

Und ich kann das komplette Formular nicht sehen.
Kann es daran liegen das ich Camera im Control Public deklariert habe?
Habe es mit 'shared' versucht kein unterschied.
Was könnte ich machen?
 

Neue Beiträge