2

Visual C# Express 2010 フォーム アプリケーションにパス セレクターがあります。

aFolderBrowserDialogと a (single line)を使用しTextBoxて、選択したパスを表示します。UI 更新コードで次の行を使用します。

this.textBoxFolder.Text = this.folderBrowserDialog1.SelectedPath;

フォーム デザイナーを使用して、ReadOnlyプロパティをtrueに設定し、TextAlignプロパティをRightに設定します。これは、選択したパスが TextBox よりも長いことが多く、パスの右側を表示することを好むためです。フォーム デザイナーはこれを生成します。

// 
// textBoxFolder
// 
this.textBoxFolder.Location = new System.Drawing.Point(40, 72);
this.textBoxFolder.Name = "textBoxFolder";
this.textBoxFolder.ReadOnly = true;
this.textBoxFolder.Size = new System.Drawing.Size(160, 20);
this.textBoxFolder.TabIndex = 13;
this.textBoxFolder.TabStop = false;
this.textBoxFolder.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;

選択したパスがテキスト ボックスのサイズよりも短い場合は常に、右揃えが機能します。(しかし、これはあまり重要ではありません)

選択したパスがテキスト ボックスのサイズよりも長い場合、右揃えは効果がなく、テキスト ボックス内の文字列は、一番左の文字が表示され、一番右の文字が非表示になるように表示されます。

通常の 1 行の TextBox ( ) では、非常に長い文字列を手で入力すると、 TextAlign が Left / Right / Center に設定されているかどうかに関係なくReadOnly = false、フォーカスが離れても右端の文字が表示されることがわかっています。

言い換えれば、私の目標は、TextBox.Text が (入力ではなく) プログラムで設定され、文字列が TextBox の幅よりも長い場合、右端の文字を表示するにはどうすればよいですか?

4

2 に答える 2

5

プロパティを設定する代わりにTextAlign、キャレットを最後の文字に移動する必要があります。

textBoxFolder.Text = this.folderBrowserDialog1.SelectedPath;
textBoxFolder.SelectionStart = textBox1.Text.Length - 1;

設定SelectionStartすると、実際にキャレットが指定された位置に移動します。これにより、その位置の文字が に表示されますTextBox

Labelテキスト ボックスの代わりに を使用できる場合は、Hans Passant によって作成されたTextFormatFlags.PathEllipses、テキストの描画中にフラグを使用するここで使用できます。

于 2013-03-13T07:59:54.987 に答える