| 2008/11/29(Sat) 10:49:47 編集(投稿者)
■No28699 (見習いPG さん) に返信 > "MS Pゴシック"等の文字列が入っています "MS Pゴシック" ではなく、 "MS Pゴシック" にしておいた方が良いかと。
> dataGridView1[0, 0].Style.Font.Nameで、null例外が発生します。 フォントが割り当てられていなければ、.Style.Font は null を返しますからね。
現在の設定値を確認する目的であれば、いきなり .Style.Font を参照するのは NG です。 # 説明するとややこしいので、具体的な方法は、後述のコードから読み取ってください。(^^;
> dataGridView1.DefaultCellStyle.Font = new Font("MS Pゴシック", 9, FontStyle.Regular); > dataGridView1.Font = new Font("MS Pゴシック", 9, FontStyle.Regular);
スタイル設定は、「グリッド全体」「行単位」「奇数行」「列単位」「セル単位」などなど 複数の設定箇所がありますよね。これらの優先順位などを、よく確認してみてください。 http://msdn2.microsoft.com/ja-jp/library/1yef90x0%28VS.80%29.aspx
たとえばこんなコードを書いて、スタイルの関係を確認してみては如何でしょう。
private void Form1_Load(object sender, EventArgs e) { dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; dataGridView1.AllowUserToAddRows = false; dataGridView1.RowCount = 2; dataGridView1.ColumnCount = 4;
DataGridViewCellStyle cs; // 1行目の書式を設定 cs = dataGridView1.Rows[1].DefaultCellStyle; cs.BackColor = Color.Red; cs.Font = new Font("MS Pゴシック", 12);
// 0列目の書式を設定 cs = dataGridView1.Columns[0].DefaultCellStyle; cs.BackColor = Color.Yellow; cs.Font = new Font("Wingdings", 15);
// 1行目の1列目の書式を設定 cs = dataGridView1[1, 1].Style; cs.BackColor = Color.Green; cs.Font = null;
// 1行目の2列目の書式を設定 cs = dataGridView1[2, 1].Style; cs.BackColor = Color.Empty; cs.Font = new Font("MS 明朝", 9);
// 1行目の3列目は書式を設定しない dataGridView1[3, 1].Style = null; }
ColorConverter c = new ColorConverter(); FontConverter f = new FontConverter();
// 書式情報を表示 private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { listBox1.Items.Clear();
DataGridViewCell cell = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex]; listBox1.Items.Add("=== セルの書式 ==="); if (!cell.HasStyle) { listBox1.Items.Add("(セルの書式は"); listBox1.Items.Add(" 設定されていない)"); } else { listBox1.Items.Add("Style-Color:" + c.ConvertToString(cell.Style.BackColor)); listBox1.Items.Add("Style-Font:" + f.ConvertToString(cell.Style.Font)); } listBox1.Items.Add("Inherit-Color:" + c.ConvertToString(cell.InheritedStyle.BackColor)); listBox1.Items.Add("Inherit-Font:" + f.ConvertToString(cell.InheritedStyle.Font));
DataGridViewRow row = ((DataGridView)sender).Rows[e.RowIndex]; listBox1.Items.Add("=== 行の書式 ==="); if (!row.HasDefaultCellStyle) { listBox1.Items.Add("(行の書式は"); listBox1.Items.Add(" 設定されていない)"); } else { listBox1.Items.Add("Style-Color:" + c.ConvertToString(row.DefaultCellStyle.BackColor)); listBox1.Items.Add("Style-Font:" + f.ConvertToString(row.DefaultCellStyle.Font)); } listBox1.Items.Add("Inherit-Color:" + c.ConvertToString(row.InheritedStyle.BackColor)); listBox1.Items.Add("Inherit-Font:" + f.ConvertToString(row.InheritedStyle.Font));
DataGridViewColumn col = ((DataGridView)sender).Columns[e.ColumnIndex]; listBox1.Items.Add("=== 列の書式 ==="); if (!col.HasDefaultCellStyle) { listBox1.Items.Add("(列の書式は"); listBox1.Items.Add(" 設定されていない)"); } else { listBox1.Items.Add("Style-Color:" + c.ConvertToString(col.DefaultCellStyle.BackColor)); listBox1.Items.Add("Style-Font:" + f.ConvertToString(col.DefaultCellStyle.Font)); } listBox1.Items.Add("Inherit-Color:" + c.ConvertToString(col.InheritedStyle.BackColor)); listBox1.Items.Add("Inherit-Font:" + f.ConvertToString(col.InheritedStyle.Font)); } |