Benutzer mit den meisten Antworten
Problem mit einer Komponente und Resourcen

Frage
-
Hallo Zusammen,
ich habe ein seltsames Verhalten in VS 2010 gefunden.
Zum Problem:
Ich habe eine Komponente erstellt...
public partial class NavigationItemProvider : Component { // Konstruktoren... public Bitmap MyBitmap{get;set;} }
Nun füge ich eine neue Komponente hinzu und ziehe die o.g. Komponente auf den Arbeitsbereich.
In den Eigenschaften der hinzugefügten Komponente finde ich auch richtig ein Property MyBitmap.
Ein Click auf den bearbeiten-button von MyBitmap und es kommt der Filedialog anstelle des normalen Resourcedialogs, wo ich dann eine Resorce aus dem Projekt hätte auswählen können.
Füge ich nun irgendwo in der Solution (egal wo, auch in einem anderen Projekt) ein Fenster hinzu und öffne das Fenster und führe die Schritte zur Auswahl der Resource erneut aus, wird bei der Auswahl der Resource jetzt der Dialog zum Auswählen einer Resource angezeigt - und nicht mehr der Filedialog.
Ich kann eine Bespielanwendung zur Verfügung stellen, die das Verhalten zeigt.
Mein System
Windows XP Service Pack 3 Build 2600
VS 2010 Prof.
Was kann man machen, damit der Resourcendialog direkt angezeigt wird, ohne erst ein Fenster hinzufügen zu müssen?
Grüße
Wolfgang
- Bearbeitet Robert BreitenhoferModerator Freitag, 17. September 2010 13:55 Formatierung
Antworten
-
Hallo Wolfgang,
Ein Bug ist das IMO nicht, nur das Standard Verhalten - und in Deinem Falle mag es auch hinderlich sein.
Du darfst Dir gerne den BitmapEditor in System.Design.dll anschauen,
der über das EditorAttribute als zuständiger Editor bei einer Bitmap hinterlegt ist.
Er ist abgeleitet von der ImageEditor-Klasse und dort wird der OpenFileDialog verwendet.Visual Studio lädt erst eine Ergänzung, wenn es durch sich die Projekt-Komponenten ergibt.
Was auch naheliegend ist, da z. B. WPF ein ganz anderes Ressourcen-Konzept verwendet
und Visual Studio eine Vielzahl von Projektarten unterstützt.
Und eine Komponente - d. h. abgeleitet von System.ComponentModel.Component - hat keine Bindung
an einen speziellen Projekttyp.Wenn Du z. B. eine "Windows Forms Steuerelemente-Bibliothek" erzeugst, wird damit ein "UserControl1" erstellt
- willst Du es nicht öffentlich haben, so setze es auf internal. Solange dies einmalig geöffnet wurde,
wird der erweiterte Dialog mit Zugriff auf die Ressourcen ermöglicht.
Löscht Du es jedoch, wird spätestens mit dem Neuladen von Visual Studio wieder das Standardverhalten in Kraft gesetzt.Du darfst gerne eine Eingabe auf Connect machen.
Gruß Elmar
- Als Antwort vorgeschlagen Frank Dzaebel Dienstag, 21. September 2010 05:09
- Als Antwort markiert Robert BreitenhoferModerator Montag, 15. November 2010 12:19
Alle Antworten
-
Hallo Wolfgang,
wenn sich das Problem nicht geklärt hast, wäre es nett, wenn Du das Beispiel bereitstellen würdest.
Bei einem kurzen Versuch meinerseits habe ich da keine Unstimmigkeiten feststellen können.
Allerdings ist mir in Deiner Beschreibung nicht ganz klar:Nun füge ich eine neue Komponente hinzu und ziehe die o.g. Komponente auf den Arbeitsbereich
welchen "Arbeitsbereich" Du damit meinst.
Gruß Elmar
- Bearbeitet Robert BreitenhoferModerator Freitag, 17. September 2010 14:01 Formatierung
-
Hi Elmar,
bitte teile mir doch Deine Mailaddresse mit wohin ich Dir das schicken kann?
Ich habe leider zur Zeit nicht die Möglichkeit das Beispiel anders bereitzustellen.
Evtl. auch ne telefonnummer, weil dann ist es einfacher zu erklären :-)
Am besten an die meine mailaddresse w_f_rathotmaildotcom
Gruß
Wolfgang
-
zu Elmars Frage noch:
- > Allerdings ist mir in Deiner Beschreibung nicht ganz klar:
> "Nun füge ich eine neue Komponente hinzu und ziehe die o.g. Komponente auf den Arbeitsbereich"
> welchen "Arbeitsbereich" Du damit meinst.
IMHO ist hier die "Komponentenleiste" gemeint. Die Komponentenleiste ist ein rechteckiger Bereich, der im Entwurfsansichtsfenster unten angezeigt wird, sobald der Entwurfsansichtsmodus aktiv ist. Die Komponentenleiste wird in der Entwurfsansicht aktiviert, nachdem eine in der Komponentenleiste angezeigte Komponente dem aktuellen Dokument hinzugefügt wurde oder wenn die Komponente Teil desselben ist.
Quelle: [ComponentTray-Klasse (System.Windows.Forms.Design)]
http://msdn.microsoft.com/de-de/library/system.windows.forms.design.componenttray
ciao Frank- Bearbeitet Robert BreitenhoferModerator Freitag, 17. September 2010 14:05 Formatierung
- > Allerdings ist mir in Deiner Beschreibung nicht ganz klar:
-
Hallo Wolfgang,
habe dafür Verständnis, dass ich keinen telefonischen oder E-Mail Support geben kann,
da müsstest Du Dich an den Microsoft Support wenden, wenn es dringend ist.Ein Beispielprojekt darst Du gerne bereitstellen, wenn es Dir die Zeit erlaubt,
z. B. auf SkyDriveGruß Elmar
-
Hi all,
Es ist relativ einfach.
in einem Konsolenpojekt erstelle ich eine Komponente über hinzufügen, komponente und benenne es z.B. MyComponent.
In dieser Komponente erstelle ich ein Property vom Typ Bitmap, nennen wir es MyBitmap.
Nun füge ich eine 2. Komponente hinzu. In der Entwurfs-Ansicht dieser 2 Komponente kann ich aus der Toolbar meine erste Komponente auf die Oberfläche dieser 2. Komponente ziehen.
Selektiere ich nun myComponent1 (so sollte es ja heißen) und gehe auf die Eigenschaften, sollte es ein Property geben - MyBitmap.
Wenn ich jetzt auf den Bearbeitenbutton von diesem Property klicke (mit den drei Punkten) kommt bei mir ein Fileopen-Dialog.
Jetzt füge bitte ein Fenster dem Projekt hinzu, eigenlich sollte es ja direkt geöffnet werden, und gehe wieder zurück auf das Property myBitmap und clicke auf den Bearbeitenbutton. jetzt erhalte ich den Dialog in dem ich eine Resource auswählen kann.
Witzigerweise ist es in meinem Programm das aus mehreren Projekten besteht egal in welchem Projekt ich das Fenster öffne (es reicht ein bereits bestehendes zu öffnen)
So weit ich es testen konnte ist es nun so, jedesmal wenn ich die Komponente MyComponent (in der mein Bitmapproperty sich befindet) z.B. erweitere um ein weiteres Property, dann habe ich wieder den Fileopendialog - öffne ein Fenster und der Resourcendialog ist wieder da.
Grüße
Wolfgang
PS: Das Beispiel liegt in meinem öffentlichen bereich von SkyDrive. Leider weiß ich nicht ob oder was ich noch was angeben muss damit Ihr das findet.
-
Hallo Wolfgang,
ich konnte das anhand Deiner Beschreibung nachvollziehen.
Der Knackpunkt ist, dass Du mit einem Konsolen-Projekt anfängst -
was mir ohne Deine Beschreibung nicht eingefallen wäre.Starte mit einem einer Steuerelement-Klassen-Bibliothek
(oder Windows Forms Projekt) und Du wirst das Problem nicht haben.Dahinter stehen dürfte (nach kurzem) Blick, dass der BitmapEditor,
der den Standard-OpenFileDialog verwendet, wie Du ihn anfangs
zu sehen kriegst.
Und ersetzt wird, wenn der Windows Forms Designer aktiv wird,
was wenn ein Forms oder UserControl erstellt wird.Dabei dürfte es sich um eine Optimierung beim Ladeverhalten handeln -
normalerweise kommen in Konsolenprojekten keine Komponenten vor.Was den Download angeht - mehr für die Zukunft:
Wenn Du die Informationen zu der Datei anzeigen lässt,
findest Du dort eine Web-Adresse, die Du hier angeben kannst.Gruß Elmar
-
Hallo Elmar,
leider besteht das Problem auch, wenn ich wie Du schreibst mit einer Klassenbibliothek oder einer WinForms-Anwendung beginne.
Was ich bisher rausgefunden habe ist, das (immer?) wenn die zu ladende Komponente verändert wird der filedialog kommt.
Ok, es reicht irgend ein Fenster in der Solution zu öffnen, dann ist die Welt wieder in Ordnung.
In unserem Fall ist es so, das wir an einem DialogFramework arbeiten und die einzelnen Module per MEF geladen werden.
Da das Hauptfenster wiederum einen Dockmanager verwendet, der nur Dockpanels laden kann, können keine Fenster verwendet werden,
sondern nur UserControls, die dann in ein Dockpanel geladen werden.
Was ich also bräuchte, wäre irgend eine Initialisierung oder so was, das dem VS vorgaukelt, es wäre ein Fenster geladen worden.
Wie auch immer, ich halte das für einen Bug im VS - habe aber keine Ahnung wie oder wo man das reporten kann.
Grüße
Wolfgang
-
Hallo Wolfgang,
Ein Bug ist das IMO nicht, nur das Standard Verhalten - und in Deinem Falle mag es auch hinderlich sein.
Du darfst Dir gerne den BitmapEditor in System.Design.dll anschauen,
der über das EditorAttribute als zuständiger Editor bei einer Bitmap hinterlegt ist.
Er ist abgeleitet von der ImageEditor-Klasse und dort wird der OpenFileDialog verwendet.Visual Studio lädt erst eine Ergänzung, wenn es durch sich die Projekt-Komponenten ergibt.
Was auch naheliegend ist, da z. B. WPF ein ganz anderes Ressourcen-Konzept verwendet
und Visual Studio eine Vielzahl von Projektarten unterstützt.
Und eine Komponente - d. h. abgeleitet von System.ComponentModel.Component - hat keine Bindung
an einen speziellen Projekttyp.Wenn Du z. B. eine "Windows Forms Steuerelemente-Bibliothek" erzeugst, wird damit ein "UserControl1" erstellt
- willst Du es nicht öffentlich haben, so setze es auf internal. Solange dies einmalig geöffnet wurde,
wird der erweiterte Dialog mit Zugriff auf die Ressourcen ermöglicht.
Löscht Du es jedoch, wird spätestens mit dem Neuladen von Visual Studio wieder das Standardverhalten in Kraft gesetzt.Du darfst gerne eine Eingabe auf Connect machen.
Gruß Elmar
- Als Antwort vorgeschlagen Frank Dzaebel Dienstag, 21. September 2010 05:09
- Als Antwort markiert Robert BreitenhoferModerator Montag, 15. November 2010 12:19