Splitpanel übernehme grösse beim verschieben



  • Moin moin
    Ich suche nach einer Möglichkeit, dass ich während des Verschiebens vom Splitter, die aktuelle Grösse vom panel1 auslesen kann.

    Das Problem ist, standardmässig wird diese Grösse erst übernommen, wenn man den Splitter losgelassen hat...

    Hat jemand eine Idee?
    Ich benutze VS 2011

    Grüsse
    Chiller



  • Im splitContainer1.SplitterMoving-Event steht doch e.SplitX zur Verfügung.
    Das sollte abgesehen von Margin- und Padding-Gedöns der Breite des Panel1 entsprechen.



  • Super, das hat mir schon sehr viel weiter geholfen.

    Aber wenn ich will, dass sich der control im panel2 auch direkt beim verschieben anpasst, funktioniert das aber nicht mehr...
    Dazu müsste das panel2 dynamisch seine Position und Grösse ändern, damit sich der control anpassen kann. Wenn ich nur dessen Position ändere liegt es ausserhalb des sichtbaren Bereiches.

    Grüsse
    Chiller



  • Taadaaaaaaa

    private void splitContainer1_MouseDown(object sender, MouseEventArgs e)
    {
    	splitContainer1.IsSplitterFixed = true;
    }
    
    private void splitContainer1_MouseUp(object sender, MouseEventArgs e)
    {
    	splitContainer1.IsSplitterFixed = false;
    }
    
    private void splitContainer1_MouseMove(object sender, MouseEventArgs e)
    {
    	if (splitContainer1.IsSplitterFixed && e.Button == MouseButtons.Left && e.X >= 0)
    		splitContainer1.SplitterDistance = e.X;
    }
    


  • Etwas sauberer und allgemeingültiger:

    private void splitContainer_MouseDown(object sender, MouseEventArgs e)
    {
    	var sc = sender as SplitContainer;
    	sc.IsSplitterFixed = true;
    }
    
    private void splitContainer_MouseUp(object sender, MouseEventArgs e)
    {
    	var sc = sender as SplitContainer;
    	sc.IsSplitterFixed = false;
    }
    
    private void splitContainer_MouseMove(object sender, MouseEventArgs e)
    {
    	var sc = sender as SplitContainer;
    	if (sc.IsSplitterFixed && e.Button == MouseButtons.Left )
    		if (sc.Orientation == Orientation.Vertical && e.X >= 0)
    			sc.SplitterDistance = e.X;
    		else if (sc.Orientation == Orientation.Horizontal && e.Y >= 0)
    			sc.SplitterDistance = e.Y;
    }
    


  • Cool danke viel mal.
    Das ist genau das was ich gebraucht habe 🙂

    Grüsse
    Chiller


Anmelden zum Antworten