バインドされていないDataGridView(VS 2008)があり、その1つの列にファイルパスが含まれています。基になる値を実際に変更せずに、ColumnWidthChangedイベントでTextRendererクラスを使用して文字列をフォーマットしたいと思います。問題は、フォームを閉じたときにテーブルの内容が保存され、フォーマットされた値を保存したくないということです。私は深すぎて明白な解決策を見ることができないと思うので、皆さんにそれを指摘することに頼っています:-)。
アイデアはこれを表示することです:
C:\ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin \ gacutil.exe
...このように(列の幅に応じて):
C:\ Program Files\Microso…\gacutil.exe
話が早すぎたようです。TextRenderer.MeasureText()から非常に奇妙な結果が得られます。パス値を「C:\ DocumentsandSettings \ jluce \ MyDocuments \ Downloads」としてハードコーディングすると、C:\ Documents and Settings \ jluce \ M ... \ Downloads\0wnloads」になります。 (以下のように)ハードコーディングすると、列のサイズを変更するたびにさらに破損します。
いくつかのサイズを変更した後の様子は次のとおりです。 スクリーンショット
これが私が現在していることです。
if (e.ColumnIndex == 1)
{
foreach (DataGridViewRow Row in mappingsDataGrid.Rows)
{
string Path = (string)Row.Cells[1].Value;
Path = Path.Trim();
TextRenderer.MeasureText(Path, e.CellStyle.Font,
new Size(mappingsDataGrid.Columns[e.ColumnIndex].Width, Row.Height),
TextFormatFlags.ModifyString | TextFormatFlags.PathEllipsis);
e.Value = Path;
}
}
これはどんどん変わっていきます!!
私は、各文字を繰り返し処理し、不良文字を削除することで、文字列の破損の問題を解決することができました。しかし、今ではさらにクレイジーな問題が発生しています。イベントハンドラーで割り当てているローカル変数は、呼び出し間でその値を保持しています。
関連するコードは次のとおりです。
string Path = ""; // <-- #1
Path = "C:\\Documents and Settings\\jluce\\My Documents\\Downloads"; // <-- #2
TextRenderer.MeasureText(Path, Row.Cells[1].Style.Font,
new Size((mappingsDataGrid.Columns[e.Column.Index].Width), Row.Height),
TextFormatFlags.ModifyString | TextFormatFlags.PathEllipsis);
// Left out code that strips invalid chars
Row.Cells[1].Value = Path; // <-- #3
Path = null;
初めて列のサイズを変更する(上記のコメントの#を参照):
- この行の後、パスには「」が含まれています。
- この行の後に、上記のようにPathに文字列が含まれます。
- パスには、必要に応じて切り捨てられたファイルパスが含まれています(つまり、「C:\ Documents and Setti ... \ Downloads」)
2回目のサイズ変更:
- この行の後に、必要に応じてパスに「」が含まれます。
- この行の後、パスには「C:\ Documents and Set ... \ Downloads \ 0 Documents \ Downloads」が含まれています。これは、無効な文字(ここでは「\ 0」として表示)を削除する前の前の反復からの無効な値でした。 !!
- ひもをねじ込んだ状態から始めたので、パスはFUBARになりましたが、悪化し続けています。
明示的に値を割り当てているのに、(空の文字列を正しく割り当てた後!)前の関数呼び出しから無効な値がPathに割り当てられるのはなぜですか?!!!!!