(Käytössä VB 2008 Express Edition)
Hei! Nyt on joku ihme ongelma UserControllin käytössä.
Tein oman UserControllin 'AikaKontrolli' omaan projektiinsa, jonka tyyppi on Class Library. Testailin tuota uutta UserControllia TestContainerissa siellä projektissa, ja ihan hyvin tuntui toimivan, tarvittavien säätöjen jälkeen. Käänsin sitten sen Class Library -projektin. (Tai siis 'Build', mitä se on suomeksi?) Suljin projektin.
Tein sitten Windows Forms Application -projektin, johon on tarkoitus laittaa lomakkeelle noita 'AikaKontrolli'-objekteja. Sain laitettua oman kontrollin ToolBoxiin (Tools --> Choose Toolbox items --> Browse... - Hain sen .dll tiedoston em. Class Library -projektin bin\Release-kansiosta). Sitten vain lisäsin yhden 'AikaKontrolli'n lomakkeelle. Tuli hienosti. :)
Sitten debug-vaiheessa tuli virhe: "Invalid Resx file. Type could not be read from the data in line 128, position 5. The type's internal structure may have changed. Either implement ISerializable on the type or provide a type converter that can provide a more reliable conversion format, such as text or an array of bytes. The conversion exception was: An error occurred while deserializing the object. The serialized data is corrupt."
Ja toinen samantapainen virhe myös: "SerializationException: Type could not be read from the data in line 128, position 5. The type's internal structure may have changed. Either implement ISerializable on the type or provide a type converter that can provide a more reliable conversion format, such as text or an array of bytes. The conversion exception was: An error occurred while deserializing the object. The serialized data is corrupt.
at System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader)
at System.Resources.ResXResourceReader.EnsureResData()
at System.Resources.ResXResourceReader.GetEnumerator()
... (julmetun pitkä lista)"
:[
Mikä avuksi?
Ahaa, ongelma taitaakin olla siinä että tein tuohon UserControliin ominaisuuden (Public Property) jonka tyyppi ei ole perustyyppi vaan luokka (tai siis objekti). Vaihdoin siihen kokeeksi integerin niin johan toimi. Johan nyt. Pitääkö UserControlissa kasattu olio tosiaan purkaa jälleen osiin jotta sen saa sieltä jotenkin ulos? Olisi niin siistiä lukea se suoraan.
Ominaisuus-ongelmakin ratkesi. Vaihdoin Propertyn kahteen Subiin, joista toinen asettaa olion (ByVal-argumentilla) ja toinen lukee sen (ByRef-argumentilla).
Aihe on jo aika vanha, joten et voi enää vastata siihen.