Auf ein mögliches UserControl in meiner Anwendung zugreifen?!

06/09/2009 - 10:05 von Andreas Mahub | Report spam
Hallöchen,

puuuh, wie beschreibe ich mein Problem. Ich habe ein UserControl erstellt,
mit dem ich Dateien verwalten kann. Dieses UserControl könnte spàter in
einer Windows-Anwendung auf einer Form 1x vorhanden sein. Es könnte aber
auch 2x oder 3x vorhanden sein, dass weiss man ja vorher nicht.

Jetzt beim testen ist es 2x vorhanden, nebeneinander, àhnlich wie bei
Norton-, Midnight-, Total-Commander und wie sie nicht alle heissen.

So, um Dateien per Clipboard rüberzuziehen habe ich meine Funktionen
entsprechend fertiggestellt. Klappt auch. Wie aber stelle ich es jetzt an,
dass das eine UserControl, dem anderen UserControl sagt "Datei x kopiert" so
das UserControl1 weiss "Ah, kann aus der Liste der selektierten Dateien
entfernt werden"?

Ich habe mir das vielleicht so vorgestellt, dass ich bei ClipboardData noch
eine Eigenschaft hinzufüge wie z.B. "FCmdHandle" und das Handle des
UserControls reinlegen. Das UserControl das die Clipboard-Daten (durch
Drag&Drop) empfàngt guckt nach dieser Eigenschaft, ist sie vorhanden, wird
mit DirectCast() oder àhnlichem auf das bei der Programmierung unbekannte
UserControl zugegriffen um z.B. Events auszulösen (Datei x kopiert) oder um
Anmeldeinformationen (FTP) abzuholen, denn diese möchte ich nicht über
ClipboardData senden da man diese ja auslesen könnte.

Geht das, und wenn ja wie?! Oder ist das totaler Quark?!
Jetzt könntet ihr auch sagen "Na du hast doch eine Form wo du die Controls
reinlegst, arbeite doch da mit Events etc.". Gerade das möchte ich ja nicht,
denn vielleicht werden die UserControls spàter in zwei verschiedenen Forms
oder gar Anwendungen verwendet. Gerade bei 2 verschiedenen Forms, wie soll
da das eine UserControl vom anderen UserControl wissen, ob das kopieren
funktioniert hat?!

Gruß
Andy
 

Lesen sie die antworten

#1 Armin Zingler
06/09/2009 - 13:37 | Warnen spam
Andreas Mahub schrieb:
[...]
Geht das, und wenn ja wie?! Oder ist das totaler Quark?!
Jetzt könntet ihr auch sagen "Na du hast doch eine Form wo du die Controls
reinlegst, arbeite doch da mit Events etc.". Gerade das möchte ich ja nicht,
denn vielleicht werden die UserControls spàter in zwei verschiedenen Forms
oder gar Anwendungen verwendet. Gerade bei 2 verschiedenen Forms, wie soll
da das eine UserControl vom anderen UserControl wissen, ob das kopieren
funktioniert hat?!



Eben deswegen brauchst du Events. Instanz A löst ein Ereignis aus. Die
Form fàngt es auf und ruft daraufhin eine Methode in Instanz B auf bzw.
setzt die entsprechende Eigenschaft, damit die Selektion aufgehoben wird.


Anwendungsübergreifend (auch anwendungsintern möglich) ist es etwas
anderes. Da kannst du den Rückgabewert der DoDragDrop-Funktion
auswerten. Es kann aber keine komplexe Aussage über den Erfolg einer
Operation gemacht werden, also in dem Fall ob das Kopieren erfolgreich
war. Das Ziel kann lediglich e.Effect im Fehlerfall auf 'None' setzen.
Da du allerdings erst nach dem Kopieren weißt, ob es erfolgreich war
kannst du e.Effect auch nicht früher setzen, und das hat den Nachteil,
dass wàhrend des Kopierens noch der entsprechende Mauszeiger angezeigt
wird. Außerdem wird die Quell-Anwendung wàhrenddessen blockiert.

Wenn du hingegen im Hintergrund kopierst, d.h. der
DragDrop-Ereignishandler wird möglichst schnell wieder verlassen, dann
hast du im Prinzip auch keine Möglichkeit der Quelle der
DragDrop-Operation etwas mitzuteilen.

Außerdem kannst du in dem Fall mit dem FileSystemWatcher arbeiten. Was
du dann unter welchen Umstànden wie machen willst, entzieht sich jedoch
meiner Kenntnis.


Armin

Ähnliche fragen