2009-06-11 4 views
5

Я считаю панель макета таблицы в C# (.net 2.0) очень примитивной. Я хотел разрешить моим пользователям изменять размеры столбцов на панели макета таблицы, но нет готовых вариантов для этого. Есть ли способ, по крайней мере, выяснить, находится ли курсор непосредственно над любыми границами ячейки, и если да, то какая ячейка находится под ним? Возможно, эта информация может быть использована, мы можем попытаться изменить размер этого кода/столбца через код. Помогите мне найти,Редактируемая панель компоновки таблиц в C#

  • ли курсор находится прямо над какой-либо границы ячейки
  • который клетка под ней (применимо только если первый вопрос есть ответ)

Большое спасибо,

Сударсан Сринивазан

+0

hey sudarsanyes Вы когда-нибудь решали эту проблему? Теперь я столкнулся с той же проблемой. пользователь моего приложения должен иметь возможность изменять размеры строк и столбцов таблицы tableLayoutPanel моего приложения во время выполнения. –

ответ

7

Если вы макет не слишком сложным, может быть, вы можете добиться того, что вы хотите с помощью SplitContainer управления? К сожалению, каждый SplitContainer будет иметь только две «клетки», но вы можете встроить SplitContainer в другой SplitContiner панели, чтобы получить более изменяемого размера ячеек:

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

ОК, так что ASCII искусство никогда не был один из моих сильных навыков, но я думаю, вы получите точку; о)

+0

Не будет ли это очень сложным и дорогостоящим? [вы действительно хороши в искусстве ASCII, чем я: D] – sudarsanyes

+0

Ужасно, да, но значительно менее сложный и дорогостоящий, чтобы пытаться обрабатывать события в панели макета таблицы, я бы сказал. – Benjol

+0

Это обходной путь, который я использую, но я не думаю, что существует (простой) способ обеспечения соблюдения табличного представления, поскольку в момент изменения размера внутреннего контейнера с разделом он не синхронизируется с другими разделенными контейнерами в ваш стол. Возможно, с обработчиками событий кодирования. – tsemer

0

здание на вершине @Fredrik Mörk's solution:

После внедрения другого SplitContainer (ов), единственным недостатком является то, что они не могут автоматически изменять размеры вместе, так что вы быстро теряют вид табличного , Решение может быть создан обработчик с SplitterMoved событий для каждого применимого SplitContainer:

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

Если SplitContainer горизонтально использование e.SplitX, если это вертикальное использование e.SplitY.