|
■No80168 (ふたも さん) に返信
> そのTextBoxColumnの内容をコピーして別のColumnへペーストしたりするので、
> その際に、再度変換処理しないといけないので難しですよね
先に紹介した方法ではそうせざるを得ないですね。
それをしなくてもいい方法としては、思いつきですが、以下のようにもできると思います。
下のコードは、昔、ある列の文字のみハイパーリンクのように見せるため作ったサンプルです。
それに半角空白を□に置き換えるコードを追加しています。
こうすると初期画面での表示は、例えば Ana□Trujillo□... というようになりますが、それ
をクリックすると元の文字列 Ana Trujillo Emparedados y helados が表示されるので、右ク
リックしてそれをコピーするということはできます。
private void customersDataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
// CompanyName 列の DataGridViewTextBoxColumn を書き換え。
// 当然、マウスポインタは指型にならないし、クリックしても変化なし
if (this.customersDataGridView.Columns["dataGridViewTextBoxColumn2"].Index == e.ColumnIndex && e.RowIndex >= 0)
{
using (
Brush gridBrush = new SolidBrush(this.customersDataGridView.GridColor),
backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
// Erase the cell.
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
// Draw the grid lines (only the right and bottom lines;
// DataGridView takes care of the others).
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
e.CellBounds.Bottom - 1);
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
e.CellBounds.Top, e.CellBounds.Right - 1,
e.CellBounds.Bottom);
Font font = new Font(e.CellStyle.Font, FontStyle.Underline);
StringFormat format1 = new StringFormat() {
FormatFlags = StringFormatFlags.NoWrap,
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Center,
Trimming = StringTrimming.EllipsisCharacter };
// Draw the text content of the cell, ignoring alignment.
if (e.Value != null)
{
//e.Graphics.DrawString((String)e.Value, font,
// Brushes.Blue, e.CellBounds.X + 2,
// e.CellBounds.Y + 2, StringFormat.GenericDefault);
// わんくま掲示板の検証用
String s = (String)e.Value;
e.Graphics.DrawString(s.Replace(' ', '□'), font,
Brushes.Blue, e.CellBounds, format1);
//e.Graphics.DrawString((String)e.Value, font,
// Brushes.Blue, e.CellBounds, format1);
}
e.Handled = true;
}
}
}
}
|