[C#] Cursor ctor ArgumentNullException

Pagina: 1
Acties:

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
Ik gebruik in me usercontrol veel verschillende cursors. Deze werden geladen uit een map. Dus de cursors werden gewoon geladen met Cursor.FromFile(...). Dit werkt prima, maar ik wil ze eigenlijk in me resources hebben.

Nu heb ik de cursor files toegevoegt aan me project in Visual Studio .NET 2003 en bij properties - Build Action de waarde op Embedded Resource gezet.
Ik probeer ze nu te laden met:
C#:
1
this.curCheckBox = new Cursor(this.GetType(), "checkbox.cur");


Dit geeft alleen een ArgumentNullException. Ik heb het ook al geprobeert met:

C#:
1
2
3
Assembly asm = Assembly.GetAssembly(this.GetType());
Stream cursorStream = asm.GetManifestResourceStream("checkbox.cur");
this.curLabel = new Cursor(cursorStream );


Maar dit geeft dezelfde exception.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
this.curCheckBox = new Cursor(this.GetType(), "checkbox.cur");

zoekt naar: namespace.checkbox.cur in je assembly's resourcefile. Waar heb je de resources toegevoegd? Aan de control's assembly of aan de main app's resourcefile?

edit: this.GetType() is fout. Eerste argument voor die overload is het type van de resource en dat is het cursor type, niet je usercontrol type :)

[ Voor 30% gewijzigd door EfBe op 11-04-2004 14:16 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 11 april 2004 @ 14:09:
this.curCheckBox = new Cursor(this.GetType(), "checkbox.cur");

zoekt naar: namespace.checkbox.cur in je assembly's resourcefile. Waar heb je de resources toegevoegd? Aan de control's assembly of aan de main app's resourcefile?

edit: this.GetType() is fout. Eerste argument voor die overload is het type van de resource en dat is het cursor type, niet je usercontrol type :)
Ik heb in het propertie window van de Cursor file de eigenschap Build Action op de waarde Embedded Resource gezet. Dus dan worden ze automatisch toegevoegd dacht ik.

En die get type had ik eerst op het type van Cursor staan. Maar dit gat dus geen goed resultaat. Maar het stond zo in MSDN :
C#:
1
this.Cursor = new Cursor(GetType(), "MyCursor.Cur");

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
questa schreef op 11 april 2004 @ 18:03:
[...]


Ik heb in het propertie window van de Cursor file de eigenschap Build Action op de waarde Embedded Resource gezet. Dus dan worden ze automatisch toegevoegd dacht ik.

En die get type had ik eerst op het type van Cursor staan. Maar dit gat dus geen goed resultaat. Maar het stond zo in MSDN :
C#:
1
this.Cursor = new Cursor(GetType(), "MyCursor.Cur");
edit:
Waar kan ik de resource file van me control vinden?

edit:

Sorry voor de quote ipv edit |:(

[ Voor 6% gewijzigd door pjvandesande op 11-04-2004 18:05 ]


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 11 april 2004 @ 14:09:
edit: this.GetType() is fout. Eerste argument voor die overload is het type van de resource en dat is het cursor type, niet je usercontrol type :)
*kick + vraag* O-)

Is die GetType niet voor de namespace?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Nee de gettype is om het type van de resource op te halen, immers je moet die meegeven aan Cursor's ctor (als 1e parameter, als ik goed heb gekeken). Je moet verder je namespace VOOR 'checkbox.cur' zetten.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
Ik heb nu dus:
C#:
1
this.curCheckBox = new Cursor(typeof(Cursor), "CallPageDesigner.checkbox.cur");


Maar nog steeds de exception.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Wanneer krijg je de exception en wat is de stacktrace? In de designer?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
Hij sprinkt de debuger in. En de stacktrace is als volgt:

code:
1
2
3
4
5
6
7
'testapp.exe': Loaded 'c:\windows\assembly\gac\system.xml\1.0.5000.0__b77a5c561934e089\system.xml.dll', No symbols loaded.
System.ArgumentNullException: Value cannot be null.
Parameter name: dataStream
   at System.Windows.Forms.ComStreamFromDataStream..ctor(Stream dataStream)
   at System.Windows.Forms.Cursor..ctor(Stream stream)
   at System.Windows.Forms.Cursor..ctor(Type type, String resource)
   at CallPageDesigner.Designer.InitializeCursors() in c:\documents and settings\questa\my documents\visual studio projects\pagedesigner\designer\designer.cs:line 281

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Dus in code dat in design time wordt gebruikt? Het lijkt erop dat typeof(Cursor) vrolijk null teruggeeft...

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 13 april 2004 @ 17:17:
Dus in code dat in design time wordt gebruikt? Het lijkt erop dat typeof(Cursor) vrolijk null teruggeeft...
Dit is runtime, typeof geeft gewoon wat terug. Ik gebruik nu:

code:
1
2
Type t = typeof(Cursor);
this.curCheckBox = new Cursor(t, "CallPageDesigner.checkbox.cur");


Dit om typeof te controleren. Maar word gewoon goed gevult. Hoe kan ik controleren of CallPageDesigner.checkbox.cur in me resources is opgenomen?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Via the ResourceSet dacht ik (System.Resources). Kijk even in de constructor docs voor een example.

Het kan zijn dat er ergens een localization error zit, aangezien resources per culture worden opgeslagen.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
Oke, welke file moet ik openen. Ik ken alleen me (UserControl)designer.cs en daar dus designer.resx. Maar die open hij niet echt... klijg dan een 'Stream is not a valid resource file; exception.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Hmmm, ik geloof dat ik die fout ook al eens gehad heb.
Gebruik je SourceSafe ?

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
whoami schreef op 13 april 2004 @ 22:05:
Hmmm, ik geloof dat ik die fout ook al eens gehad heb.
Gebruik je SourceSafe ?
Nee op deze PC niet. Op deja en google kom ik wel veel tegen over deze fout. Maar niet echt een oplossing. O-)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Mjah, ik heb er altijd Sourcesafe (icm VS.NET) van verdacht om die resources te gaan vernaggelen. Maar als je het niet gebruikt....
Eigenlijk is het wel een goed idee om een of andere vorm van source-control te gaan gebruiken, als er dan eens iets misloopt -zoals nu- kan je altijd teruggaan naar de vorige versie.
I was late to appreciate the benefits of source code control systems but now I wouldn't live without
one even on a one-person project. Generally they are necessary when you have team working on
the same code base. However, they have another great advantage: they encourage thinking about
the code as a growing, organic system. Since each change is marked as a new revision with a new
name or number, one begins to think of the software as a visibly progressive series of improvements.
I think this is especially useful for beginners.

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
whoami schreef op 13 april 2004 @ 22:11:
Mjah, ik heb er altijd Sourcesafe (icm VS.NET) van verdacht om die resources te gaan vernaggelen. Maar als je het niet gebruikt....
Eigenlijk is het wel een goed idee om een of andere vorm van source-control te gaan gebruiken, als er dan eens iets misloopt -zoals nu- kan je altijd teruggaan naar de vorige versie.
Er is niets aan de hand. Alle anderen resources worden gewoon geladen. Kan het niet zijn dat hij gewoon niet tussen me resources staat. Ik heb hier nog geen ervaring mee... :X

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Het is een class, je kunt at runtime die ResourceSet openen en erdoorheen fietsen en kijken welke resources er @ runtime beschikbaar zijn. Beter dan @ designtime kijken lijkt me :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 13 april 2004 @ 23:54:
Het is een class, je kunt at runtime die ResourceSet openen en erdoorheen fietsen en kijken welke resources er @ runtime beschikbaar zijn. Beter dan @ designtime kijken lijkt me :)
Het lukt me niet om de ResourceSet te gebruiken. Ik weet namelijk niet welke file ik moet doorlopen. Dus ik weet niet welk pad ik opmoet geven in de ctor. Ik kan het op MSDN ook niet echt vinden. ;(

  • EfBe
  • Registratie: Januari 2000
  • Niet online
De assembly waar de resources in zijn gecompileerd, dus je .exe file. Als je dat example in de docs van ResourceSet gebruikt, zie je dan iets, of niks?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 14 april 2004 @ 09:39:
De assembly waar de resources in zijn gecompileerd, dus je .exe file.
Bedankt EfBe, ik probeer dus nu de resources van me .DLL te lezen. Maar deze geeft dus ook een exception.

System.ArgumentException
Additional information: Stream is not a valid resource file.
EfBe schreef op 14 april 2004 @ 09:39:
Als je dat example in de docs van ResourceSet gebruikt, zie je dan iets, of niks?
Als ik de broncode zo letterlijk copy'eer vanuit MSDN en run krijg ik de volgende exception.

System.IO.FileNotFoundException
Additional information: Could not find file "C:\Documents and Settings\questa\My Documents\Visual Studio Projects\PageDesigner\testapp\bin\Debug\items.resources".

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Darn ik moet echt beter lezen. ResourceSet kan alleen resource files lezen nu ik beter lees. ResXResourceSet kan resx files lezen, maar ook daar heb je niet zoveel aan, want je wilt het at runtime weten. Ik ga even zoeken of ik nog wat kan vinden.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
EfBe schreef op 14 april 2004 @ 12:27:
Darn ik moet echt beter lezen. ResourceSet kan alleen resource files lezen nu ik beter lees. ResXResourceSet kan resx files lezen, maar ook daar heb je niet zoveel aan, want je wilt het at runtime weten. Ik ga even zoeken of ik nog wat kan vinden.
Bedankt alvast EfBe! _/-\o_

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ok

Assembly asm = Assembly.GetAssembly(this.GetType());
string[] allResourceNames = asm.GetManifestResourceNames();

zou alle resource names in de huidige assembly (dus waar je deze code in executeert) moeten geven in een stringarray.

[ Voor 9% gewijzigd door EfBe op 14-04-2004 12:33 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
code:
1
2
3
4
5
6
7
8
9
CallPageDesigner.Cursors.section.cur
CallPageDesigner.Cursors.groupbox.cur
CallPageDesigner.Designer.resources
CallPageDesigner.Cursors.checkbox.cur
CallPageDesigner.Cursors.memobox.cur
CallPageDesigner.Cursors.label.cur
CallPageDesigner.Cursors.combobox.cur
CallPageDesigner.Cursors.optionbutton.cur
CallPageDesigner.Cursors.textbox.cur


Dit zijn alle keys in me Resource. Zo te zien staan ze er dus wel mooi in. Ik zie ook dat de namespace dus CallPageDesigner.Cursors is. Maar ook de volgende code wil niet werken, nog steeds dezelfde exception:

C#:
1
2
Type t = typeof(Cursor);
this.curCheckBox = new Cursor(t, "CallPageDesigner.Cursors.checkbox.cur");

  • EfBe
  • Registratie: Januari 2000
  • Niet online
En als je GetManifestResourceInfo("CallPageDesigner.Cursors.checkbox.cur") aanroept, als method van asm (geeft een object terug, zie GetManifestResourceInfo docs voor details), krijg je dan wel resultaat terug of ook een error?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
try
{
    Assembly asm = Assembly.GetAssembly(this.GetType());
    Stream str = asm.GetManifestResourceStream("CallPageDesigner.Cursors.checkbox.cur");
    this.curCheckBox = new Cursor(str);
}
catch(Exception caught)
{
    System.Diagnostics.Trace.WriteLine(caught);
}


Werkt perfect EfBE! Bedank voor de moeite! _/-\o_
Pagina: 1