Gå til innhold

hvor finner tutorials om menyer og skifte vinduer


Anbefalte innlegg

Videoannonse
Annonse
EEh, hva mener du?

 

tenker du på noe som:

 

Dim Vindu As Form1 = New Form1

Vindu.Show()

 

??

6964912[/snapback]

 

vet ikke om noen annen måte å forklare det på enn den idiotiske måten... så tok den varianten ;)

 

når du trykker på en del i en meny (feks kalender-knappen i Outlook) så skiftes hele hoved-vinduet i programmet (i Outlook-tilfelle kommer da kalender-funksjonen opp og dekker hele vinduet). hvordan får en til det i C#?

 

(kan legge ved screenshots hvis det fremdeles er dårlig forklart)

Lenke til kommentar

Det lurer faktisk jeg også på... Du tenker på noe sånt som f.eks. settings-dialogen i Live Messenger? der hvor du velger et element i en meny, så skiftes ut en del av vinduet?

 

Det jeg TROR du gjør i det tilfellet er at du har mange grouBox-er som overlapper hverandre, så endrer du på hvem som er visible og hvem som er hidden. Det jeg ikke helt skjønner med denne fremgangsmåten er hvordan man det lager det i IDE-et, siden alle controls vises til enhver tid der hele tiden.

Endret av hockey500
Lenke til kommentar
Det lurer faktisk jeg også på... Du tenker på noe sånt som f.eks. settings-dialogen i Live Messenger? der hvor du velger et element i en meny, så skiftes ut en del av vinduet?

6965751[/snapback]

 

Bruk UserControls og man trenger ikke ha alle i GUI designeren heller. Det beste vil kanskje være å laste dem inn automatisk via kode når brukeren trykker på f.eks. en knapp:

 

void VisMinControl_Click(...)
{
  EnPanelIFormenMin.Controls.Clear();
  MinUserControl uc = new MinUserControl();
  uc.Dock = DockStyles.Dock; ?
  EnPanelIFormenMin.Controls.Add( uc );
}

Lenke til kommentar
Bruk UserControls og man trenger ikke ha alle i GUI designeren heller. Det beste vil kanskje være å laste dem inn automatisk via kode når brukeren trykker på f.eks. en knapp:

 

 

den koden brukes i action event, i dette tilfelle i knappens action event...? (kanskje teit spm, men en må spørre for å få svar)

Lenke til kommentar
ja.. det er fra Java.. er ikke helt sikker på hva det er i C#....

(i java blir funksjonen action event brukt idet en bruker trykker feks på en knapp)

6970418[/snapback]

 

 

Stemmer. Det er OnClick på vanlige knapper. Andre kontroller har andre navn på eventene som f.eks. dropdown bokser heter det OnSelectedIndexChanged osv...

 

Fikk du løst problemet da?

Lenke til kommentar
Stemmer. Det er OnClick på vanlige knapper. Andre kontroller har andre navn på eventene som f.eks. dropdown bokser heter det OnSelectedIndexChanged osv...

 

Fikk du løst problemet da?

6970641[/snapback]

 

Jeps. har vært ganske oppklarende dette.

 

 

et siste spm: hva heter det når du trykker på et element i menyen da? (feks når du trykker File -> New Window i Opera)

Lenke til kommentar
Jeps. har vært ganske oppklarende dette.

 

et siste spm: hva heter det når du trykker på et element i menyen da? (feks når du trykker File -> New Window i Opera)

6970929[/snapback]

 

Er vel OnClick på den også tror jeg?.... Hvis du bruker Visual Studio så har du jo sånn fin liste med events og med litt engelskkunnskaper har vel de fleste ganske forståelige navn...

Lenke til kommentar
Jeps. har vært ganske oppklarende dette.

 

et siste spm: hva heter det når du trykker på et element i menyen da? (feks når du trykker File -> New Window i Opera)

6970929[/snapback]

 

Er vel OnClick på den også tror jeg?.... Hvis du bruker Visual Studio så har du jo sånn fin liste med events og med litt engelskkunnskaper har vel de fleste ganske forståelige navn...

6971101[/snapback]

 

takk for all hjelp

Lenke til kommentar

Glimrende - satt akkurat og lurte på det samme :D

 

Poenget er altså her at det lages et "panel" i hoved-Formen, og det opprettes nye nye "UserControls" som tilpasses slik at de passer i "panelet"? Eller kanskje det lureste er å lage en "mal", og så bruke add UserControl Inherited?

 

Er det forresten denne metoden her (panel, med usercontrols) som er vanlig å bruke (som f.eks. er brukt i outlook), eller er dette bare et kjapt forslag til løsning fra deg?

Er f.eks outlook bygget ved at det er laget forskjellige UserControls? Og hver gang du klikker på f.eks. "kontakter" sjekker den om en "kontakter" Usercontrol allerede eksisterer, hvis ikke lager en ny som plasseres i "panel" kontrollen i Formen? Og før det må Controls.Clear() kjøres?

 

            if (CachedWindows.ContainsKey("EtVindu") == false)
            {
                CachedWindows.Add("EtVindu", new EtVindu());
                CachedWindows["EtVindu"].Dock = DockStyle.Fill;
            }
            pContent.Controls.Clear();
            pContent.Controls.Add(CachedWindows["EtVindu"]);

Endret av Lurifaksen
Lenke til kommentar

Det var et kjapt eksempel på hvordan det kan gjøres ja. Og som de fleste andre ting når det gjelder programmering finnes det sikkert hundre andre måter å gjøre det på.

 

Hvis noen av vinduene bruker mye minne f.eks. kan det være lurt å ikke "cache" dem slik jeg gjør. Men da må man huske på å "lagre instillinger" hver gang de ikke skal vises mer. "Cachingen" her gjør også at programmet har kortere oppstartstid.

 

Hvis jeg hadde hatt mange vinduer ville jeg kanskje også brukt Reflection + et interface for å vise menyvalgene dynamisk. Gjør dette i et prosjekt jeg lager nå faktisk hvor man bare slenger DLL filer inn i en mappe og så blir de automatisk vist i en meny og trykker man på den kommer vinduet (som er kodet i DLL filen) opp. Bruker heller ikke Panel i det prosjektet, men vanlige MDI vinduer...

 

Jeg er helt enig i at man bør enten arve av en annen form eller implementere et interface for å sikre at alle "vinduene" har nogenlunde lik funksjonalitet.

 

F.eks. når man lukker programmet skal jo alle vinduene lagre instillinger... Da ville jeg implementert en interface f.eks. IMinPanel:

 

(eksempel på funskjonalitet... sikkert ikke korrekt syntax..)

 

public void FormClosing(...)  // i hovedformen din
{
   foreach(IMinPanel p in CachedWindows)
  { 
       if( p.CantCloseNow )
       {
            e.cancel = true;
            MessageBox.Show( p.Title + " kan ikke lukkes nå for der skjer det noe viktig...");
            return;
       }
  }

   foreach(IMinPanel p in CachedWindows)
  { 
       p.SaveSettings();
  }
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...