login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[C#] usercontrol Views (Opgelost)

Offline larssy1 - 05/05/2011 20:09
Avatar van larssy1MySQL beginner Beste sitemasters en applicatieontwikkelaars,

Momenteel ben ik bezig om een Progress CMS te maken in de vorm van een C# applicatie.

Ik heb recentelijk ontdekt dat je gemakkelijk met usercontrols om een tabcontrol effect te krijgen.

Hiervoor heb ik dus een Form (frmMain) waarop alles komt te staan, ook heeft deze zijn eigen GUI.

Daarnaast heb ik onder andere een map genaamt Views waarin ik usercontrols heb gezet waaronder contentView, menuView en pageHomeView.

het contentView is ingedeeld in 2 vakken mbv het tablelayoutpanel control. Links komt het menu en rechts de content pages.

echter is nu het probleem, dat ik wel het menu kan weergeven, maar zodra er op een knop word geklikt, veranderd de pagina niet mee.

Bij contentView wou ik deze code gebruiken:
  1. public contentView()
  2. {
  3. InitializeComponent();
  4.  
  5. setView("Home");
  6. }
  7.  
  8. pageHomeView homeView = new pageHomeView();
  9. pageProgressView progressView = new pageProgressView();
  10.  
  11. public void setView(string _setView)
  12. {
  13. switch (_setView)
  14. {
  15. case "Home":
  16. this.tlpBody.Controls.Add(homeView, 1, 0);
  17. break;
  18. case "Progress":
  19. this.tlpBody.Controls.Add(progressView, 1, 0);
  20. break;
  21. }
  22. }


en bij menuView de volgende:
  1. contentView content;
  2.  
  3. private void pbProgress_MouseClick(object sender, MouseEventArgs e)
  4. {
  5. resetAll("Progress");
  6.  
  7. this.pbProgress.Image = global::HorseCMS.Properties.Resources.btnProgress_Active;
  8. this.pbProgress.Cursor = Cursors.Default;
  9.  
  10. content = new contentView();
  11. content.setView("Progress");
  12. }


Alleen haalt dit niks uit en veranderd er niks op het beeldscherm.

Hopenlijk kunnen jullie mij hierbij verder helpen.

Met Vriendelijke Groet,
Lars

9 antwoorden

Gesponsorde links
Offline Stijn - 05/05/2011 21:44 (laatste wijziging 05/05/2011 21:46)
Avatar van Stijn PHP expert Ok ik zal je eens proberen te helpen (nu ik wat meer code zie). In je menuView zou ik een Property maken ipv die contentView content.

  1. public contentView Content{ get; set; }


Daarna zou ik bij het maken van je menuView in contentView (wss staat er ergens in die code new menuView()?) het volgende toevoegen.

  1. menu.Content = this;


In die pbProgress_MouseClick code zou ik de content = new contentView(); weglaten!

Snap je waarom? Je maakt een nieuwe contentView aan terwijl je de contentView moet aanspreken die op je Form staat. Paar opmerkingen.

1) Zorg voor een default view in je switch statement.
2) Denk meer in OO princiepes want een string switchen om klasses te laden... Werk met een interface of abstracte klasse voor je views.
Offline larssy1 - 05/05/2011 21:58 (laatste wijziging 06/05/2011 21:13)
Avatar van larssy1 MySQL beginner 1. Ik zat er ook al aan te denken omdat ik nu bij wijze van spreken telkens een nieuw contentView aanvraag. En dat gaat uiteraard niet werken, alleen kon ik hiervoor echter niet zosnel een globale oplossing vinden.

Ik zal een kijken of ik het met jou methodes voltooien kan, zo niet, dan kom ik hierop terug 

----------

Er is zeker geen handige / eenvoudige methode om het flikkeren tussen usercontrols op te lossen door middel van een loading screen? en pas de pagina weergeven als die volledig is geladen in het ram/cache geheugen? ^__^
Offline Abbas - 06/05/2011 22:34
Avatar van Abbas Gouden medaille

Crew .NET
Stijn je hebt gelijk qua principes van werken en dergelijke. Maar als dit alles in orde is kan je ook via de 'setView' methode werken en moet je niet per se met een Property werken e. 
Offline larssy1 - 08/05/2011 18:50
Avatar van larssy1 MySQL beginner Nja, ik heb zover het switchen tussen 'tabbladen' al wel werkend, het enigste irritante is nu die witte flitsen die je dan ziet..

Citaat:
"Er is zeker geen handige / eenvoudige methode om het flikkeren tussen usercontrols op te lossen door middel van een loading screen? en pas de pagina weergeven als die volledig is geladen in het ram/cache geheugen? ^__^ "
Offline Stijn - 08/05/2011 23:54
Avatar van Stijn PHP expert Veel C# ken ik niet maar ik zou de view laden in een container ofzo waar de visible op false staat, wanneer alles klaar is met renderen zet je de visible op true en de huidige container vernietig je dan (en zet je zijn visible op false);
Offline larssy1 - 10/05/2011 01:40
Avatar van larssy1 MySQL beginner Hmm ik kom er maar niet uit, heb verschillende methodes geprobeerd, helaas zonder succes :]
Offline Stijn - 10/05/2011 19:10
Avatar van Stijn PHP expert Plaats je project eens online Dan kan ik hem eens runnen om te zien wat er mis mee is.
Offline larssy1 - 16/05/2011 17:43
Avatar van larssy1 MySQL beginner
Stijn schreef:
Plaats je project eens online Dan kan ik hem eens runnen om te zien wat er mis mee is.

vind je het goed als ik je toevoeg op msn? Wil mijn project niet graag publiekelijk maken.
Offline Stijn - 16/05/2011 19:32
Avatar van Stijn PHP expert Plaats het ergens en pm me de url dan.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.191s