Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 11:53   #1
Shtolz
Новичок
Джуниор
 
Регистрация: 06.11.2010
Сообщений: 1
Восклицание координаты курсора textbox-a(WPF)

здравствуйте подскажите как получить координаты курсора textBox-a ну или ширину введенного текста в пикселях =) дело в том что мне нужно реализовать что то похожее на intelisense но вот метод для получения координат найти не могу в winform можно это сделать вот так
Код:
textbox1.GetPositionFromCharIndex(textbox1.SelectionStart)
а для wpf ничего похожего найти не могу =((
Shtolz вне форума Ответить с цитированием
Старый 06.11.2010, 14:07   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

У меня получилось это сделать так:
Код:
<Window x:Class="TestProgram.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="550"
        TextOptions.TextFormattingMode="Display" MinHeight="350" MinWidth="550">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="158,21,0,0" Name="textBox1" VerticalAlignment="Top" Width="331" TextChanged="textBox1_TextChanged" />
        <Rectangle Height="100" HorizontalAlignment="Left" Margin="125,71,0,0" Name="rectangle" Stroke="Black" VerticalAlignment="Top" Width="70" Fill="#FF89B7DE" />
    </Grid>
</Window>
Как создашь новый проект, замени XAML код главного окна на приведённый выше, но только x:Class="TestProgram.MainWindow" оставь тот, что создался. Короче заменяй всё, кроме этой строки. А ну и это код для 4-го фрэймворка, чтобы работал на 3.5 удали TextOptions.TextFormattingMode="Dis play"

Код:
        private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            Rect rect;
            double lengthText = 0; //длинна текста
            int countChars = this.textBox1.GetLineLength(0); //получаем кол-во символов
            for (int i = 0; i < countChars; i++) //проходимся по всем символам, получая положение по оси Х для каждого
			{
                rect = this.textBox1.GetRectFromCharacterIndex(i, true); 
                lengthText = rect.X;
			}

            Point pointMousePos = new Point(lengthText + this.textBox1.Margin.Left, this.textBox1.Margin.Top);
            Thickness th = new Thickness(pointMousePos.X, pointMousePos.Y, 0, 0);
            this.rectangle.Margin = th;
        }
Вставь этот код и попробуй запустить. У меня получилось, что при каждом нажатии на кнопку, прямоугольник находится с правого края у последнего символа. Другими словами всё работает как задумано. А там уже пробуй переделать под себя. Я вообще особо не разбирался, но уверен можно лучше сделать.

Вот ещё какой-то пример, может быть пригодится:
http://www.weask.us/entry/obtaining-...sition-textbox

Последний раз редактировалось Casper-SC; 06.11.2010 в 15:42.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RichEdit Координаты Курсора nusik Общие вопросы Delphi 5 25.04.2009 23:24
Координаты текстового курсора DeKot Общие вопросы Delphi 4 07.03.2009 20:47
как узнать координаты курсора nikleb Общие вопросы C/C++ 2 29.10.2008 23:36
Координаты курсора на изображении Ciberal Мультимедиа в Delphi 2 28.10.2008 19:33
Координаты курсора Haster Win Api 8 06.08.2007 12:04