Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#]Toolstripmanager restored locations niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een toolstripcontainer met 4 toolstrips. Elke toolstrip heeft AllowReorder op True staan.
In form_load heb ik Toolstripmanager.LoadSettings(this) staan en in de form_closing Toolstripmanager.Savesettings(this).
Als ik een toolbutton verplaatst en de toolstrips in een andere volgorde zet en ik stop de applicatie en ik dan in het user.config bestandje kijk, dan zie ik dat de volgorde van de knoppen is aangepast en dat de locations van de toolstrip zijn gewijzigd.
Als ik nu mijn applicatie weer opstart, zie ik wel dat de volgorde van de knoppen zijn zoals ik die had gezet, maar de toolstrips staan nog steeds op de oorspronkelijke locaties.

Het lijkt er dus op dat maar een deel van de settingsfile wordt gelezen.

Overigens worden de toolstrips ook niet in de volgorde getoond waarin ik ze in de designer heb gezet.

Iemand een idee?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ik had de eerste twee links al gelezen.
De eerste is een soort bug report, maar die is niet geaccepteerd.
De tweede heb ik gebruikt als voorbeeld en de derde gaat over problemen bij het opslaan van de volgorde van de toolbuttons. Daar heb ik juist geen problemen mee.

Ik kan inmiddels het probleem reproduceren in de designer.
Ik sleep een toolstrip naar de left container. Vervolgens sleep ik de toolstrip weer terug naar de top container.
ipv dat mijn toolstrip op de locatie wordt gezet waar ik mijn muis heb, worden alle toolstrips door elkaar gegooid en in twee rijen horizontaal gecentreerd weergegeven. Dat is precies ook de situatie als ik mijn applicatie start. 8)7

Overigens gebruik ik VS2008Pro met .NET v3.5 op Vista

Ik heb even een paar screenshotjes gemaakt.
Dit is mijn designer:
Afbeeldingslocatie: http://www.mapwindow.nl/mapwindow/images/stories/tijdelijk/designer.png

Als ik de applicatie opstart, ziet het er zo uit:
Afbeeldingslocatie: http://www.mapwindow.nl/mapwindow/images/stories/tijdelijk/initialStart.png

Nu zet ik het goed en verplaats de knop 'Save As'
Afbeeldingslocatie: http://www.mapwindow.nl/mapwindow/images/stories/tijdelijk/NaVerschuiven2.png

Na het opnieuw opstarten ziet het er zo uit:
Afbeeldingslocatie: http://www.mapwindow.nl/mapwindow/images/stories/tijdelijk/NaOpnieuwStarten.png
Zie dat de knop 'Save As' op de nieuwe locatie staat. De settingsfile is dus wel gelezen.

[ Voor 32% gewijzigd door Verwijderd op 06-04-2011 16:06 ]


Verwijderd

Topicstarter
Na nog meer Googlen blijkt het toch een feature te zijn van Microsoft. Als je je toolstrips in de top panel zet in design mode, dan worden de locaties niet gebruikt. Zet je ze vervolgens run time in bijv. het linker panel dan worden ze wel netjes opgeslagen en gerestored. Dit blijkt al sinds 2007 bekent te zijn. Ik kan niet vinden of het met VS2010 en/of .NET v4 is opgelost.

Om dit probleem op te lossen, dacht ik om de user.config zelf te lezen en te parsen. Maar uiteraard gaat dat ook niet eenvoudig omdat de locatie van het bestand niet geheel duidelijk is.
Als ik Application.UserAppDataPath of Application.LocalUserAppDataPath gebruik, kom ik in een andere folder terecht dan waar de Toolstripmanager zijn user.config verwacht.
De folder van de Toolstripmanager lijkt op dit:
code:
1
C:\Documents and Settings\[i]<user>[/i]\Local Settings\Application Data\[i]<deel vd companyname>[/i]\[i]<exename>[/i].exe_Url_qm3lemg3r1b5xifu3b4mm2lkfal0joy3\4.8.2.28371

Terwijl UserAppDataPath is [code]C:\Documents and Settings[i]<user>[/i]\Local Settings\Application Data[i]<gehele companyname>[/i][i]<productname>[/i]\4.8.2[/code]

Enig idee hoe ik wel het juiste user.config bestand kan vinden om die te parsen.
En ook nu heb ik uiteraard eerst via Google gezocht.

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
De user.config hoef je niet zelf op te zoeken.
Dit is namelijk een afsplitsing van je appsettings. AppSettings welke in je app.config bestand staan worden tijdens runtime uitgesplitst per type. User settings komen in de user.config terecht, en application settings blijven in de app.config staan.

Maar dat is allemaal details. Wat belangrijk is is dat je gewoon die settings via de normale SettingsManager kunt benaderen. Je moet alleen even weten hoe de setting heet, maar dat zal niet zo moeilijk zijn denk ik :)

Edit:

Hier heb je een linkje naar de code van de Internal class genaamd ToolStripSettingsManager, wellicht dat je dan een beter idee krijgt waar je de settings vandaan kunt halen. Het lijkt erop dat het als ApplicationSettings wordt opgeslagen...

[ Voor 32% gewijzigd door D-Raven op 06-04-2011 18:03 ]


Verwijderd

Topicstarter
Bedankt voor de link.
Ik zal me eens gaan verdiepen in de settingsmanager. Ik heb het eigenlijk niet eerder gebruikt ;)
Even vlug in Google gezocht, maar het vergt wel iets meer inlezen ;)

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
Mja het is zowiezo een vaag ding. Maar het is dan ook een internal klasse.

Verwijderd

Topicstarter
Na veel uitzoekwerk is het me gelukt om via ApplicationSettingsBase de user.config uit te lezen.
Ik voeg zelfs een setting toe die ik bij het opstarten weer uitlees.

Maar waar het allemaal om begon, werkt nog steeds niet.
De locations worden wel netjes gezet, maar later weer overschreven indien de volgorde van de toolstrips is gewijzigd.
Als ik de volgorde vd toolstrips aanhou die in de user.config staat, kan ik de toolstrips uit elkaar schuiven.
Als ik vervolgens weer de applicatie start, staan de toolstrips zoals ik ze had gezet.
Ga ik nu de volgorde veranderen, dan staan ze na het opstarten weer in de 'initiele' volgorde en locatie.

Ik log in het LocationChanged event van de toolstrips en dan zie ik ook dat een locatie wijziging van 1 toolstrip tot gevolg heeft dat alle andere toolstrips ook worden verplaatst.
Overigens geldt dit nog steeds alleen voor de toolstrips die in de toppanel van de container zitten, omdat ik hier de toolstrip in design-time in heb geplaatst. Toolstrips in de andere containers hebben nergens last van. Die kan ik in elke volgorde zetten.

Iemand nog een idee?

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
Wellicht een idee om handmatig de settings te saven en in te laden, normaliter worden deze in de InitializeComponent van je Form getriggered, maar je zou deze code daaruit kunnen halen en dit handmatig uitvoeren in je form load en form close.
Het lijkt er namelijk op dat je ergens een probleem hebt in de volgorde waarin settings worden toegepast ten opzichte van het laden van je controls.

Verwijderd

Topicstarter
@Deathraven: Bedankt voor je hint, maar dat deed ik al.
In de formLoad deed ik eerst
C#:
1
ToolStripManager.LoadSettings(this);

Vervolgens las ik de rest van de attributen uit de user.config, inclusief de Location
Maar dat werkte nog steeds niet.

Inmiddels heb ik het wel werkend voor elkaar.
Voordat ik
C#:
1
ToolStripManager.LoadSettings(this);
doe, verplaats ik de toolstrips die in de toppanel zit naar de bottompanel. Vervolgens is het geen probleem meer en worden de toolstrips correct neergezet op de locatie die in user.config staat.
Het blijft een beetje vaag, maar op jouw eerdere post te herhalen:
Mja het is zowiezo een vaag ding

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
Verwijderd schreef op zondag 10 april 2011 @ 21:48:
@Deathraven: Bedankt voor je hint, maar dat deed ik al.
In de formLoad deed ik eerst
C#:
1
ToolStripManager.LoadSettings(this);

Vervolgens las ik de rest van de attributen uit de user.config, inclusief de Location
Maar dat werkte nog steeds niet.

Inmiddels heb ik het wel werkend voor elkaar.
Voordat ik
C#:
1
ToolStripManager.LoadSettings(this);
doe, verplaats ik de toolstrips die in de toppanel zit naar de bottompanel. Vervolgens is het geen probleem meer en worden de toolstrips correct neergezet op de locatie die in user.config staat.
Het blijft een beetje vaag, maar op jouw eerdere post te herhalen:

[...]
Stom ding, heb er een hele tijd geleden ook mee mogen worstelen. Een configuratie opzetten in de winforms designer, vervolgens builden, en dan er achter komen dat het tijdens runtime gewoon de default laat zien ipv wat ik geconfigureerd had. Als je daarna weer terug naar je designer ging dan stond het inderdaad weer op default. Om helemaal gestoord van te worden.
Pagina: 1