Gå til innhold

Skjema i skjema - Er det mulig?


Anbefalte innlegg

Hei!

 

Jeg lager et program som skal ha en typisk "Settings Dialog" med kanskje et TreeView på høyresiden som lister opp de forskjellige kategoriene med innstillinger. Et trykk på en innstilling viser tilhørende Controller på venstresiden av skjemaet.

 

Men det var jo ikke helt enkelt å få til. En mulighet er jo å legge alle Controller tilhørende én innstilling i en Container og så skjule denne når den ikke behøves. Men det gjør jo at det blir litt mer tungvindt å legge opp alle skjermbildene, så jeg håpte det fantes en bedre løsning.

 

Kan man f.eks. lage flere skjemaer på forhånd for å kombinere dem i et skjema etterpå?

Lenke til kommentar
Videoannonse
Annonse

Hvis du mener <form> når du prater om skjema så kan du IKKE neste dem. Du kan ha flere på siden uavhengig av hverandre, men det er også litt knotete med ASP.Net. Prøvd å bruke UserControl'er? (Disse kan du laste dynamisk ved å bruke LoadControl også, slik at du slipper å holde styr på dem med Visible=True/False)

Lenke til kommentar

Hvis du mener webside programmering, se bortifra dette.

 

Det jeg har gjort er å lage et treeview, og assigne et System.Type til hver som Tag, og etterpå kalle

System.Activator.CreateInstanceFrom(TreeNode.Tag)

Og hver av disse er en typisk Form bare, med hva en vil ha av innhold, men det lønner seg å sette FormBorderStyle til None, så kan ingen flytte vinduet :p

Og sette [Resultat].TopLevel til False, og på kontrollen som skal inneholde formen/usercontrolen, må du kalle Controls.Add(resultat)

Og når en annen TreeNode blir valgt, bare Disposer du den gamle formen/kontrollen

 

eksempel:

 	if (ActivePage != null)
 	{
   ActivePage.Close();
   ActivePage.Dispose();
   pnlDock.Controls.Clear();
   ActivePage = null;
 	}
 	if (e.Node.Tag != null)
 	{
   ActivePage = (Form)Activator.CreateInstance((System.Type)e.Node.Tag);
   ActivePage.TopLevel = false;
   ActivePage.Location = new Point(0, 0);
   pnlDock.Controls.Add(ActivePage);
   ActivePage.Show();
 	}

Lenke til kommentar

Et triks er å bruke en tabcontrol der du skjuler selve tab'ene, så kan du bruke en TreeView til å sette aktiv TabPage (f.eks. tabControl.SelectedIndex = 0).

 

Kode for å skjule tab'ene (f.eks. i Form_Load):

tabControl1.Region = new Region(new RectangleF(tabPage1.Left, tabPage1.Top, tabPage1.Width, tabPage1.Height));

 

På denne måten har du full kontroll med de forskjellige "sidene" i design mode.

 

Øyvind

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å
×
×
  • Opprett ny...