Знание местоположения точки каре в Winforms TextBox?

Как чрезвычайно легкий должен найти, что PHP связал вещи Примеры, Приложения, Классы, Документация, Платформы, и т.д.

На всем протяжении сети, это - самый легкий язык для изучения при движении коммандос (собой), и также тот с большим количеством значения в течение Вашего времени.

После изучения PHP мог бы поместить CMS с joomla, блог с Wordpress, и т.д.

7
задан LCC 2 December 2009 в 07:36
поделиться

5 ответов

Если вы не против использования Win32-API, используйте GetCaretPos , чтобы получить точное положение.

7
ответ дан 6 December 2019 в 19:37
поделиться
 TextBox lbl = new TextBox(); 
                 lbl.Text = Build("20000", i);
                 lbl.Location = new Point(30, 25 * i);
                 lbl.Width = 350;
                 lbl.MouseHover += new EventHandler(lbl_MouseHover);

   void lbl_MouseHover(object sender,
 EventArgs e)
         {
             TextBox t = (TextBox)sender;
             ListBox lb = new ListBox();
             for (int i = 0; i < 10; i++)
             {
                 lb.Items.Add("Hej");
             }
             int x = t.Location.X; 
             int y = t.Location.Y + t.Height;
             lb.Location = new Point(x, y);
             panel1.Controls.Add(lb);
             lb.BringToFront(); 
         }

Обратите внимание на этот конкретный фрагмент кода: int y = t.Location.Y + t.Height; Вы добавляете высоту текстового поля к оси Y.

0
ответ дан 6 December 2019 в 19:37
поделиться

Я обнаружил необычное поведение элемента управления текстовым полем. Когда вы вводите текст в конце текстового поля, GetPositionFromCharIndex остается 0,0. Однако, если вы вставляете текст перед последним символом в текстовом поле, GetPositionFromCharIndex обновляется.

Не знаю, можете ли вы использовать это в своих интересах, но я думаю, вы могли бы это знать.

Изменить: Хорошо , LOL, похоже, это работает, насколько это может быть уродливо ...:

Point pt = textBox1.GetPositionFromCharIndex(textBox1.SelectionStart > 0 ? textBox1.SelectionStart - 1 : 0);

Редактировать 2: Оглядываясь назад, я думаю, что поведение не такое уж странное, поскольку SelectionStart в конце текстового поля возвращает индекс, в котором будет набран следующий символ, а не там, где на самом деле находится последний символ. Поскольку GetPositionFromCharIndex вернет позицию символа, индекс еще не существующего char, очевидно, возвращает 0,0.

Редактировать 3: С моим и MikeJ '

5
ответ дан 6 December 2019 в 19:37
поделиться
MessageBox.Show(textBox1.SelectionStart.ToString());
0
ответ дан 6 December 2019 в 19:37
поделиться

В событии TextBox.KeyDown прикрепите фрагмент кода, чтобы найти точку экрана курсора внутри элемента управления текстовым окном:

using (Graphics g = Graphics.FromHwnd(textBox1.Handle))
{
    SizeF size = g.MeasureString(textBox1.Text.Substring(0, textBox1.SelectionStart), textBox1.Font);

Point pt = textBox1.PointToScreen(new Point((int)size.Width, (int)0));
    label1.Text = "Manual: " + pt.ToString();
}

Приведенный выше фрагмент кода учитывает шрифт, используемый элементом управления TextBox для правильного подсчета фактической длины строки до позиции курсора внутри элемента управления. При выполнении автозавершения в стиле "Intellisense" важно знать фактическую позицию экрана, чтобы вывести на экран список "Автозавершение".

Это то, что делает фрагмент. Он вычисляет ширину текста, затем преобразует его с "локальной" координатой в элемент управления TextBox и оттуда преобразует эту точку в соответствующую координату экрана.

Одно предостережение, которое следует учитывать: SelectionStart задерживается и не обновляется немедленно. Частично это связано с тем, как элемент управления текстового поля обрабатывает ввод с клавиатуры.

.
1
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: