DataGridViewCell
がDataGridViewより大きい場合、DataGridView
コントロール(Windows.Forms、.NET Framework 3.0)でかなり厄介な問題が発生しました。 。大型セルをスクロールして表示すると、通常は表示されますが、表示されているセルの大きさはビューよりも大きいため、下側が切り取られます。さらに下にスクロールすると、最終的に上部に「スナップ」して、一定のしきい値に達するまでそこにとどまります。次に、次の行が上部に表示され、「大きな」行が消えます。DataGridView、大きなセル:コンテンツが完全に表示されず、スクロールしているセルがスキップされる
このため、大きなセルの内容を完全に見ることはできません。この問題を解決する方法
using System;
using System.Windows;
namespace LoggerTextBox {
public class TestForm : Form
{
public TestForm()
{
Text = "DataGridView Large Cell Example";
SetBounds(0, 0, 300, 200, BoundsSpecified.Width | BoundsSpecified.Height);
DataGridView dataGridView = new DataGridView();
dataGridView.Dock = DockStyle.Fill;
dataGridView.ScrollBars = ScrollBars.Both;
dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
Controls.Add(dataGridView);
DataGridViewColumn column = new DataGridViewTextBoxColumn();
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
column.CellTemplate.Style.WrapMode = DataGridViewTriState.True;
dataGridView.Columns.Add(column);
// normal row
DataGridViewRow row = new DataGridViewRow();
DataGridViewCell cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
cell.Value = "Foo";
row.Cells.Add(cell);
dataGridView.Rows.AddRange(row);
// multiline row
row = new DataGridViewRow();
cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
cell.Value =
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr," + Environment.NewLine +
"sed diam nonumy eirmod tempor invidunt ut labore et doloreLorem," + Environment.NewLine +
"ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy," + Environment.NewLine +
"eirmod tempor invidunt ut labore et dolore magna aliquyam erat,," + Environment.NewLine +
"sed diam voluptua. At vero eos et accusam et justo duo dolores et," + Environment.NewLine +
"ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est," + Environment.NewLine +
"Lorem ipsum dolor sit amet. magna aliquyam erat, sed diam voluptua.," + Environment.NewLine +
"At vero eos et accusam et justo duo dolores et ea rebum. Stet clita," + Environment.NewLine +
"kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
row.Cells.Add(cell);
dataGridView.Rows.AddRange(row);
// normal row
row = new DataGridViewRow();
cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
cell.Value = "Bar";
row.Cells.Add(cell);
dataGridView.Rows.AddRange(row);
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new TestForm());
}
}
} // namespace
任意のアイデア:
は、ここで例のコードですか?
私はテキストボックスのログ記録の目的よりも、より洗練されたものが必要(正確には、ログ出力を表示する)と考え出しDataGridView(ログ項目のリストにバインド)は良い考えです。私は今このスクロールの問題を回避し、いくつかの行にあらかじめメッセージを分割しています。それが他の問題を紹介するので、私が欲しいものではありません。でも、大丈夫です。 ありがとう! – sunside
@Markus:あなたはすべてあなたのラテン語のログインをしますか? :) – MusiGenesis
@Markus:あなたの問題をここで別の質問として尋ねることをお勧めします。何か "(非常に長い)潜在的に非常に長いログアイテムをwinformsアプリケーションに表示するための最良のコントロールは何ですか?"私は本当に良い答え、自分自身を考えることができません。私はおそらくこのための完全なカスタムコントロールを書くことになるだろうが、それは潜在的に多くの仕事です。 – MusiGenesis