Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resizable table layout panel in c#

I find the table layout panel in c# (.net 2.0) to be very primitive. I wanted to allow my users to resize the columns in a table layout panel but there are no ready made options to do so. Is there a way atleast to find out whether the cursor is directly over any borders of a cell and if so, which cell is beneath it ?? May be having this information, we can atleast try resizing that row/column thru' code. Help me finding,

  • whether the cursor is directly over any borders of a cell
  • which cell is beneath it (applicable only if the first question has an answer)

Many Thanks,

Sudarsan Srinivasan

like image 952
sudarsanyes Avatar asked Jun 11 '09 11:06

sudarsanyes


2 Answers

If your layout is not overly complex, maybe you can achieve what you want by using SplitContainer controls? Unfortunately, each SplitContainer will have only two "cells", but you can embed a SplitContainer in another SplitContiner panel to get more resizable cells:

┌──────────────────┐
│┌─────┬──────────┐│
││     │          ││
││     │          ││
│└─────┴──────────┘│
├──────────────────┤
│┌──────────┬─────┐│
││          │     ││
││          │     ││
│└──────────┴─────┘│
└──────────────────┘

OK, so ASCII art was never one of my stronger skills, but I think you get the point ;o)

like image 151
Fredrik Mörk Avatar answered Oct 19 '22 10:10

Fredrik Mörk


Building on top of @Fredrik Mörk's solution:

After embedding another SplitContainer(s), the only drawback is that they don't automatically resize together, so you quickly lose the tabular view. A solution could be to set up a SplitterMoved event handler for every applicable SplitContainer:

private void mySplitContainer_SplitterMoved(object sender, SplitterEventArgs e) {
  mOtherySplitContainer.SplitterDistance = e.SplitX;
}

If your SplitContainer is horizontal use e.SplitX, if it's vertical use e.SplitY.

like image 30
tsemer Avatar answered Oct 19 '22 11:10

tsemer