C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.97200 の関連記事表示

<< 0 >>
■97200  dataGridViewにて改行コードがある場合のみ改行
□投稿者/ 馬渕誠一 -(2021/04/13(Tue) 00:05:39)

    分類:[C#] 

    改行コードがある場合のみ改行、ない場合は、列幅を広げ文字が収まるようにしたいのですがうまくいきません。
    どう書けばいいでしょうか?

    //
    // dataGridView1
    //
    dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopLeft;
    dataGridViewCellStyle1.BackColor = System.Drawing.Color.Beige;
    dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
    this.dataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
    this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
    this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;
    this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;
    this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
    dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
    dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
    dataGridViewCellStyle2.Font = new System.Drawing.Font("MS ゴシック", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
    dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
    dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
    dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
    dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
    this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle2;
    this.dataGridView1.Location = new System.Drawing.Point(11, 49);
    this.dataGridView1.Margin = new System.Windows.Forms.Padding(2);
    this.dataGridView1.Name = "dataGridView1";
    this.dataGridView1.RowHeadersWidth = 51;
    this.dataGridView1.RowTemplate.Height = 24;
    this.dataGridView1.Size = new System.Drawing.Size(865, 413);
    this.dataGridView1.TabIndex = 6;
親記事 /過去ログ168より / 関連記事表示
削除チェック/

■97202  Re[1]: dataGridViewにて改行コードがある場合のみ改行
□投稿者/ 魔界の仮面弁士 -(2021/04/13(Tue) 14:52:54)
    No97200 (馬渕誠一 さん) に返信
    > どう書けばいいでしょうか?

    過去ログ No78277 に、似たような話題がありましたね。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=78277&KLOG=133


    > // dataGridView1
    (抜粋)
    > AutoSizeColumnsMode = DisplayedCells
    > AutoSizeRowsMode = DisplayedCells

    この設定は「セル内容を書き換えた時」や「ソート時」などには処理されますが、
    スクロール時には考慮されないことに注意が必要です。


    たとえば DisplayedCells モードにおいて、
    先頭行の任意の列に「ABCDEFGHIJKLMNOPQRSTUVWXYZ」と記入して自動リサイズされた後、
    垂直スクロールして、その先頭行を領域外に押し出したとします。

    その後、同列の任意行に「12345」という短文を書くと、列幅が自動縮小されます。

    この状態で、スクロールして先頭行に戻った場合、列幅は狭いままです。
    そのため、長文がセル内に収まりきらない状態になってしまいます。



    > 文字が収まるようにしたい

    パフォーマンスとのトレードオフにはなりますが、DisplayedCells モードのまま
    スクロールにも追従しようとするなら、こういう手もあります。

    dataGridView1.Scroll += delegate
    {
     dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
     dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.DisplayedCells);
    };

    このケースは、スクロールする度にセルサイズが変わることになるのが欠点です。
    水平・垂直スクロールの両方が必要なケースでは使い勝手が悪いかもしれません。


    スクロールに影響を与えないよう、最大のセルサイズを優先する形にする場合は
    AllCells や AllCellsExceptHeaders モードを使うようにしてみてください。
    このモードは全セルが計測対象になるため、行数・列数が増えると
    DisplayedCells モードよりも負荷が上がります。

    AllCells の欠点は、殆どのセルが短文で、一つのセルだけが長文だった場合、
    長文セルにつられて、他のセルが余白ばかりになってしまうという点ですね。

    どちらが良いかはケースバイケース。


    また、予期せぬ位置で改行されてしまうワードラップの問題については、
    下記のような対処方法があります。下記は AllCells モードの例です。

    private void Form1_Load(object sender, EventArgs e)
    {
      dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
      dataGridView1.ReadOnly = false;

      dataGridView1.DataSource = null;
      dataGridView1.AutoGenerateColumns = false;
      dataGridView1.RowCount = 100;
      dataGridView1.ColumnCount = 5;

      dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
      dataGridView1.AlternatingRowsDefaultCellStyle.WrapMode = DataGridViewTriState.True;
      dataGridView1.AllowUserToResizeColumns = false;
      dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
      dataGridView1.AllowUserToResizeRows = false;
      dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
      dataGridView1.CellEndEdit += (target, arg) =>
      { // 最大幅を設定してからリサイズしなおす
        dataGridView1.Columns[arg.ColumnIndex].Width = 0x10000;
        dataGridView1.AutoResizeRow(arg.RowIndex, DataGridViewAutoSizeRowMode.AllCells);
        dataGridView1.AutoResizeColumn(arg.ColumnIndex, DataGridViewAutoSizeColumnMode.AllCells);
      };
      dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
      dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
    }
記事No.97200 のレス /過去ログ168より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -