WinFormsのTableLayoutPanelの行数列数をコードで動的に増減する際の注意点
前提
- WinFormsでTableLayoutPanelを使っていて行数列数を動的に変更させたい人向け
- 私が引っかかったので共有
やりたいこと
Winformsで手軽に均等分割などができるコントロールであるTableLayoutPanel。
その行数列数をコードで動的に増減したい。
今回は3x3と2x2のレイアウトをトグルで切り替える。
罠
均等分割ならパーセントで50%と33.333%あたりを入れ替えればいいだろう。
ん?
TableLayoutPanelにColumnCount, RowCountというset可能なプロパティが有るぞ。
→よしせっかくなのでついでにこいつにも列数行数を代入してみよう。
private void ToggleLayout()
{
IsQuarterLayout = !IsQuarterLayout;
const float half = 50f;
const float thirds = 33.333f;
var count = IsQuarterLayout ? 2 : 3;
tableLayoutPanel.ColumnCount = count;
tableLayoutPanel.RowCount = count;
tableLayoutPanel.ColumnStyles[0] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.ColumnStyles[1] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.ColumnStyles[2] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? 0 : thirds);
tableLayoutPanel.RowStyles[0] = new RowStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.RowStyles[1] = new RowStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.RowStyles[2] = new RowStyle(SizeType.Percent, IsQuarterLayout ? 0 : thirds);
}
一見うまくいったように見えるが、ウィンドウを縦に伸ばし一定の高さを超えると謎の行が下に現れる。
は?
解決方法
ColumnCount, RowCountには代入してはいけない。
private void ToggleLayout()
{
IsQuarterLayout = !IsQuarterLayout;
const float half = 50f;
const float thirds = 33.333f;
tableLayoutPanel.ColumnStyles[0] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.ColumnStyles[1] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.ColumnStyles[2] = new ColumnStyle(SizeType.Percent, IsQuarterLayout ? 0 : thirds);
tableLayoutPanel.RowStyles[0] = new RowStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.RowStyles[1] = new RowStyle(SizeType.Percent, IsQuarterLayout ? half : thirds);
tableLayoutPanel.RowStyles[2] = new RowStyle(SizeType.Percent, IsQuarterLayout ? 0 : thirds);
}
教訓
なんかそれっぽい名前だからといってよく分からないプロパティに代入してはいけない。
Author And Source
この問題について(WinFormsのTableLayoutPanelの行数列数をコードで動的に増減する際の注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/souten21kobayashi/items/c8cb94455195c0462c0c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .