🕌

C# DataGridViewのスクロールバーが消える現象

2022/03/17に公開

はじめに

開発中に謎現象に遭遇したのでメモ、メモ。
.NetFramework環境でWinフォームアプリで発生するのだけど、
TabControlの中にDataGridViewを配置して、TabControlのEnableをFlase→Trueすると、DataGridViewのスクロールバーが操作できなくなる。

環境

Win11 Home 64bit
.NetFramework4.8
VisualStudio2022

動作

とりあえず確認の為に作成したウィンドウはこんな感じ。
コントロールのプロパティは極力デフォルトなので、見た目の悪さは勘弁してください。

右側のボタンを順番に押していって、途中タブの切り替え操作を実施すると、

最後に「tabPage1」に戻すと、赤枠の通り、スクロールバーが操作出来ない状態となってしまう。
こうなると、どうにも戻りません。

実装

1.ボタンの中身は、適当にDataGridViewにデータを追加

private void button1_Click(object sender, EventArgs e)
{
    foreach(var n in Enumerable.Range(0,10))
        dataGridView1.Rows.Add($"{n}");

}

2.Tabは手で切りかえてね
3.TabControlをEnableを操作

private void button3_Click(object sender, EventArgs e)
{
    tabControl1.Enabled = false;
}

4.DataGridViewを一旦消して、再度データを追加

private void button4_Click(object sender, EventArgs e)
{
    dataGridView1.Rows.Clear();
    foreach (var n in Enumerable.Range(0, 10))
        dataGridView1.Rows.Add($"{n}");

}

5.最後にTabControlをEnableを戻す

private void button4_Click(object sender, EventArgs e)
{
    tabControl1.Enabled = true;
}

解決策

どうもデータを更新する順番を変更するしかないみたいです。
データ更新する際には、TabControlのEnableをTrueにした後とする事で、現象の発生を防げます。

Discussion