问题
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
回答1:
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)
回答2:
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
.
来源:https://stackoverflow.com/questions/980489/resizable-table-layout-panel-in-c-sharp