Avatar billede legrand Nybegynder
23. september 2009 - 15:22 Der er 4 kommentarer og
1 løsning

C# 4-vejs split container

Jeg prøver at lave en 4-vejs split container i min C# windows forms applikation i stil med den man anvender i valves hammer editor etc. (se link i bunden)

Jeg har forsøgt mig med at neste en split container i en anden split container, men problemet her er, at splitterne ikke er forbundet med hinanden.

Jeg er ude efter at når jeg griber en horisontal splitter, flytter begge horisontale splittere sig, hvormed højden af alle 4 vinduer justeres - ligeledes med de vertikale splittere og justering af bredden.
Herudover skal man kunne tage fat i krydset hvor splitterne skærer hinanden, hvorved alle 4 vinduer kan ændres i både højden og bredden.

Kan nogen hjælpe mig med at løse dette problem?

Mvh. LeGrand

Valve Hammer Editor: http://upload.wikimedia.org/wikipedia/en/3/31/Valve_Hammer_Editor.gif
Avatar billede Spotgun Seniormester
23. september 2009 - 22:13 #1
Den første del med at splitterne bevæger sig uafhængigt af hinanden, kan nemt løses ved brug af nestede splitContainers som du selv er inde på.

splitContainer1 skal være vertikal. I dens panel1 sætter du splitContainer2 som er horizontal og i panel 2 sætter du splitContainer 3 som ligeledes er horizontal.

Herefter skal du hooke dig op på splitContainer2 og 3's "SplitterMoving" event og flytte den modsatte splitContainers SplitterDistance. Her er et hurtigt eksempel:

        public Form1()
        {
            InitializeComponent();
            splitContainer2.SplitterMoving += new SplitterCancelEventHandler(splitContainer2_SplitterMoving);
            splitContainer3.SplitterMoving += new SplitterCancelEventHandler(splitContainer3_SplitterMoving);
        }

        void splitContainer3_SplitterMoving(object sender, SplitterCancelEventArgs e)
        {
            splitContainer2.SplitterDistance = e.SplitY;
        }

        void splitContainer2_SplitterMoving(object sender, SplitterCancelEventArgs e)
        {
            splitContainer3.SplitterDistance = e.SplitY;
        }

Det løser dog ikke dit sidste problem med at tage fat i krydset i midten og justere alle fire panels på en gang.
Jeg kan desværre ikke lige komme på nogen nem måde at løse det.
Avatar billede legrand Nybegynder
25. september 2009 - 08:49 #2
det virker fint bortset fra lidt kosmetisk...når man tager fat i den venstre splitter, bliver den gennemsigtig, mens den højre forbliver 'solid' og vice versa. Har du en løsning til dette? (send i øvrigt et svar, så får du point for ovenstående)
Avatar billede Spotgun Seniormester
25. september 2009 - 09:36 #3
Jeg har ikke lige en løsning ved hånden på det kosmetiske problem, men du kan evt. prøve at lege lidt med nogle af de andre events du kan hooke dig op på, og se om de opfører sig anderledes.

Alternativt skal du nok ud i en custom implementering af splitContainer for at få alle de ønskede funktionaliteter, men det bliver noget mere besværligt...
Avatar billede Spotgun Seniormester
25. september 2009 - 09:44 #4
Avatar billede legrand Nybegynder
25. september 2009 - 11:19 #5
takker :]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester