Reputation: 3204
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,
Many Thanks,
Sudarsan Srinivasan
Upvotes: 9
Views: 13292
Reputation: 1
One can achieve this (at least .Net above 4.x) using the splitter control. For example use a panel, drop a button, set it to dock left. Drop a splitter, drop another button set it to dock fill. Then the size of these buttons within the control can be set by the user at runtime.
Upvotes: 0
Reputation: 158379
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)
Upvotes: 12
Reputation: 3178
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
.
Upvotes: 1