TextBox.GetRectFromCharacterIndex(Int32, Boolean) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan wilayah persegi panjang untuk tepi awal atau akhir karakter pada indeks karakter tertentu.
public:
virtual Rect GetRectFromCharacterIndex(int charIndex, bool trailingEdge) = GetRectFromCharacterIndex;
Rect GetRectFromCharacterIndex(int const& charIndex, bool const& trailingEdge);
public Rect GetRectFromCharacterIndex(int charIndex, bool trailingEdge);
function getRectFromCharacterIndex(charIndex, trailingEdge)
Public Function GetRectFromCharacterIndex (charIndex As Integer, trailingEdge As Boolean) As Rect
Parameter
- charIndex
-
Int32
int
Indeks karakter berbasis nol untuk mengambil persegi panjang.
- trailingEdge
-
Boolean
bool
true untuk mendapatkan tepi berikutnya; false untuk mendapatkan tepi utama karakter.
Mengembalikan
Persegi panjang untuk tepi karakter pada indeks yang ditentukan.
Contoh
Contoh ini menunjukkan cara menggunakan GetRectFromCharacterIndex untuk menentukan persegi panjang untuk teks yang dipilih. Untuk contoh lengkapnya, lihat Skenario 2 dari sampel ContextMenu.
// Returns a rect for selected text.
// If no text is selected, returns caret location.
// Text box should not be empty.
private Rect GetTextboxSelectionRect(TextBox textbox)
{
Rect rectFirst, rectLast;
if (textbox.SelectionStart == textbox.Text.Length)
{
rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart - 1, true);
}
else
{
rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart, false);
}
int lastIndex = textbox.SelectionStart + textbox.SelectionLength;
if (lastIndex == textbox.Text.Length)
{
rectLast = textbox.GetRectFromCharacterIndex(lastIndex - 1, true);
}
else
{
rectLast = textbox.GetRectFromCharacterIndex(lastIndex, false);
}
GeneralTransform buttonTransform = textbox.TransformToVisual(null);
Point point = buttonTransform.TransformPoint(new Point());
// Make sure that we return a valid rect if selection is on multiple lines
// and end of the selection is to the left of the start of the selection.
double x, y, dx, dy;
y = point.Y + rectFirst.Top;
dy = rectLast.Bottom - rectFirst.Top;
if (rectLast.Right > rectFirst.Left)
{
x = point.X + rectFirst.Left;
dx = rectLast.Right - rectFirst.Left;
}
else
{
x = point.X + rectLast.Right;
dx = rectFirst.Left - rectLast.Right;
}
return new Rect(x, y, dx, dy);
}
Keterangan
Untuk mengganti menu konteks, tangani peristiwa ContextMenuOpening dan ganti menu default dengan menu kustom. Gunakan GetRectFromCharacterIndex untuk menentukan tempat memposisikan menu kustom. Untuk contoh ini, lihat Skenario 2 dari sampel ContextMenu. Untuk informasi desain, lihat Panduan untuk menu konteks.
Karena metode ini mengembalikan persegi panjang yang mewakili tepi karakter, lebar persegi panjang yang dikembalikan selalu 0. Untuk mendapatkan lebar karakter, Anda harus mengurangi nilai Xrect utama dari nilai X dari Rect berikutnya.