61192


お世話になります。

C#にて、DataGridの勉強中です。

フォームにDataGridViewをDock = Fillで貼り付けた後、フォーム側のサイズ変更に合わせて  
DataGridViewのサイズも自動変更されるので、そのタイミング(Resizeイベント)で  
指定のColumnだけの幅を残り空間分だけ広げようとしています。

全てのColumnを伸縮するには、AutoSizeColumnModeというのがあるらしいのですが、  
五列のうちの4,5列目だけを伸縮させたいのです。

方法として、DataGridViewの幅から、伸縮する必要のないColumnの合計を引き、それを  
二で割って4,5列のWidthに入れました。

ある程度はうまくいったのですが、見落としていた点があり、左側のレコードセレクタ部分の  
幅を取得できずにいました。

それを計算で取得しようとしたのですが、うまくいかなかったため、質問いたしました。

[![画像の説明をここに入力](https://i.stack.imgur.com/V0GdB.jpg)](https://i.stack.imgur.com/V0GdB.jpg)

この部分の幅を取得する方法はありますでしょうか。

また、もっと簡単に行える方法がありましたら、ご教授いただければ幸いです。

下記が試してみた計算部分です。

[code]

    private void dataGridView1_Resize(object sender, EventArgs e)
    {
        int space = this.dataGridView1.Width -
            (this.dataGridView1.Columns[0].Width + this.dataGridView1.Columns[1].Width + this.dataGridView1.Columns[2].Width);
        this.dataGridView1.Columns[3].Width = space / 2;
        this.dataGridView1.Columns[4].Width = space / 2;
    }
    
[/code]

よろしくお願いいたします。


CC BY-SA 4.0
2019-12-07T01:56:14.117
61190
2019-12-07T04:12:28.173
9374
question
c# form datagridview
C# DataGridViewの指定の列だけフォームのサイズに合わせて自動調整したい


その部分の列全体というわけではないですが、左上隅のセルの幅ならば、`this.dataGridView1.TopLeftHeaderCell.Size.Width`で読み取れます。

図の緑で囲んだ部分ですね。

[![DataGridViewSample](https://i.stack.imgur.com/cFUJ4.jpg)](https://i.stack.imgur.com/cFUJ4.jpg)

参考：  
[DataGridViewのヘッダーセルを取得する](https://dobon.net/vb/dotnet/datagridview/headercell.html)

> 左上隅のセルを取得するにはDataGridView.TopLeftHeaderCellプロパティを使用します。

[DataGridViewTopLeftHeaderCell クラス](https://docs.microsoft.com/ja-
jp/dotnet/api/system.windows.forms.datagridviewtopleftheadercell?view=netframework-4.8)

> Size セルのサイズを取得します。(継承元 DataGridViewCell)

[Size 構造体](https://docs.microsoft.com/ja-
jp/dotnet/api/system.drawing.size?view=netframework-4.8)

> プロパティ  
>  Height この Size 構造体の垂直コンポーネントを取得または設定します。  
>  IsEmpty この Size 構造体の幅および高さが 0 であるかどうかをテストします。  
>  Width この Size 構造体の水平コンポーネントを取得または設定します。

他に、DataGridViewの構造について、この記事が参考になるでしょう。  
[DataGridViewコントロールのオブジェクト構造 - 第1回 .NETの新しいデータグリッドを大解剖
(2/4)](https://www.atmarkit.co.jp/ait/articles/0605/10/news116_2.html)

* * *

**追記**  
目的に合っているか分からないのと、固定幅の列の考慮はしていないようですが、`MinimumWidth`とか`BorderStyle`とか、割り算の切り捨て対処とか、色々考えられている(端折っている部分もありますが)処理がここにありますので、参考に。

[フォームに合わせてDataGridViewを自動的にサイズ変更する](https://codezine.jp/article/detail/114)


CC BY-SA 4.0
2019-12-07T02:56:49.893
61192
2019-12-07T04:12:28.173
2019-12-07T04:12:28.173
26370
26370
61190
answer