Autor Beitrag
VampireSilence
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Di 06.09.11 13:51 
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) und das hier (MSDN) 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 06.09.11 15:56 
Zitat:
Zum 2.


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Di 06.09.11 20:38 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Dann trag als Namen des Bildes auch den ganzen Namespace ein

Habe ich gemacht, half aber auch nicht.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
(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.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
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
ausblenden 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