Entwickler-Ecke
WinForms - UserControl -> Update im Designer ? Toolbox Icon ?
VampireSilence - Di 06.09.11 13:51
Titel: UserControl -> Update im Designer ? Toolbox Icon ?
Hallo Zusammen,
ich sitze gerade an einem kleinen eigenen Control und ich bin da auf ein paar merkwürdige Verhalten gestoßen.
Zunächst mal ist es so, dass man über Properties die Größe indirekt verändern kann. Tut man dies zur Laufzeit läuft alles rund, tue ich das aber im Designer, behält das Control die Ausgangsform und wird nicht aktualisiert, bis ich das Projekt einmal debugt habe (Die Anwendung startet dann einmal und wenn ich es schließe und zum Designer zurückkehre, wurden die Änderungen übernommen). (Wie) kann ich den Designer das Control bei Veränderungen updaten lassen ?
Die andere Sache ist die, dass das Control einfach kein ToolBoxBitmap annimmt. Ich habe schon
das hier (myCSharp.de) [
http://www.mycsharp.de/wbb2/thread.php?postid=314239#post314239] und
das hier (MSDN) [
http://msdn.microsoft.com/en-us/library/4wk1wc0a.aspx] probiert, aber es funktioniert einfach nicht. Eine FileNotFoundException erhalte ich bestätigenderweise auch nicht. Wäre schön, wenn ihr mir da helfen könntet.
mfg
- VampireSilence
Ralf Jansen - Di 06.09.11 14:31
Zum ersten Teil deiner Frage. Wenn das ändern einer Property zu einer Veränderung der visuellen Darstellung führt (also Vermutlich auch zur Programmlaufzeit und nicht nur im Designer) solltest du ein Invalidate() im Setter der Property ausführen.
Zu deiner 2.ten Frage - Hast du diesen, übrigens in nicht zu übersehenendem Signalgelb gehaltenenen ;), Teil in der Msdn Hilfe übersehen?
| Zitat: |
| The bitmap does not appear in the Toolbox for autogenerated controls and components. To see the bitmap, reload the control by using the Choose Toolbox Items dialog box. For more information, see Walkthrough: Automatically Populating the Toolbox with Custom Components. |
VampireSilence - Di 06.09.11 15:38
Danke, das Erste hat schonmal funktioniert.
Zum 2.: Das habe ich schon gelesen und auch gemacht, aber wie gesagt funktioniert es trotzdem nicht. Ich habe auch schon mit Restorater überprüft, ob die Grafik auch wirklich in der Assembly vorhanden ist und das ist sie. In der Vorschau der Elementauswahl, wird das Icon aber auch als blaues Zahnrad (Standardicon) angezeigt.
mfg
- VampireSilence
Ralf Jansen - Di 06.09.11 15:56
Entschuldige wenn ich dir da nicht traue. Du hast tatsächlich mal testweise eine neue Solution aufgemacht und dort dann auf der Toolbox 'Choose Items' aufgerufen, die von dir kompilierte Assembly mit dem Control rausgesucht, dein Control ausgewählt und der Toolbox hinzugefügt? Wenn du dann tatsächlich dein Bitmap nicht siehst, sondern nur das Standardicon, zeige doch bitte mal die Klassendefinition mit dem ToolboxBitmapAttribute.
VampireSilence - Di 06.09.11 16:20
Kein Problem, ich kann ja verstehen, dass ich noch als Neuling gelte. Aber ja, genau das habe ich mir von vornherein angewöhnt und so füge ich grundsätzlich
immer meine Controls der Sammlung hinzu. Und ich möchte noch ergänzen, dass ich das Control zuvor in einer Klassenbibliothek erstellt und die DLL dann wie beschrieben ausgewählt habe. ;)
Meine Definition sieht wie folgt aus:
C#-Quelltext
1: 2: 3: 4:
| [System.Drawing.ToolboxBitmap(typeof(MyControl), @"icon.png")] public partial class MyControl: System.Windows.Forms.UserControl { |
mfg
- VampireSilence
Ralf Jansen - Di 06.09.11 16:52
Ist dein Icon eine "Embedded Resource" (also du hast das Bild einfach deinem Projekt hinzugefügt und die Build Action auf Embedded Resource gesetzt)? Dann trag als Namen des Bildes auch den ganzen Namespace ein (so wie du in ihn Reflector gesehen hast). Wenn du das Bild über eine Resx-Datei eingebunden hast(also auch zum Beispiel über die Projekteigenschaften) hast musst du glaube ich die Extension weglassen. Diesen Weg habe ich aber selbst noch nicht benutzt. Vielleicht braucht man da auch den vollen Namespace auf die aus der Resx Datei generierten Property für das Bild.
VampireSilence - Di 06.09.11 20:38
Ralf Jansen hat folgendes geschrieben : |
| Ist dein Icon eine "Embedded Resource" (also du hast das Bild einfach deinem Projekt hinzugefügt und die Build Action auf Embedded Resource gesetzt)? |
Ja, so stand es auf myCSharp.de und genau so habe ich es dann auch gemacht.
Ralf Jansen hat folgendes geschrieben : |
| Dann trag als Namen des Bildes auch den ganzen Namespace ein |
Habe ich gemacht, half aber auch nicht.
Ralf Jansen hat folgendes geschrieben : |
| (so wie du in ihn Reflector gesehen hast). |
Das ist jetzt nen kleines Missverständnis, ich habe mir nichts im Reflector angesehen, sondern im Restorator. Der ist nicht auf das .Net Framework beschränkt und zeigt Ressourcen nicht namentlich, sondern als Offset an.
Ralf Jansen hat folgendes geschrieben : |
| Wenn du das Bild über eine Resx-Datei eingebunden hast(also auch zum Beispiel über die Projekteigenschaften) hast musst du glaube ich die Extension weglassen. Diesen Weg habe ich aber selbst noch nicht benutzt. Vielleicht braucht man da auch den vollen Namespace auf die aus der Resx Datei generierten Property für das Bild. |
Habe beides mal versucht, aber das war es auch nicht.
Habe die Assembly jetzt auch mal mit dem .Net Inspector untersucht und der spuckt mir als Namespace "MyControl.icon.png" aus. Nun habe ich also meinen Code angepasst auf
C#-Quelltext
1:
| [System.Drawing.ToolboxBitmap(typeof(MyControl), @"MyControl.icon.png")] |
aber auch das hilft nicht.
Und was ich wieder mal prickelnd finde: Bei all den Versuchen, muss es doch irgendwo einen Namen gegeben haben, der nicht gefunden werden konnte. Wieso wird dann keine entsprechende FileNotFoundException ausgeworfen ? Dann wüsste ich wenigstens endlich, wo das Framework dann nach der Datei sucht.
mfg
- VampireSilence
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!