Как чрезвычайно легкий должен найти, что PHP связал вещи Примеры, Приложения, Классы, Документация, Платформы, и т.д.
На всем протяжении сети, это - самый легкий язык для изучения при движении коммандос (собой), и также тот с большим количеством значения в течение Вашего времени.
После изучения PHP мог бы поместить CMS с joomla, блог с Wordpress, и т.д.
Если вы не против использования Win32-API, используйте GetCaretPos , чтобы получить точное положение.
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.
Я обнаружил необычное поведение элемента управления текстовым полем. Когда вы вводите текст в конце текстового поля, GetPositionFromCharIndex остается 0,0. Однако, если вы вставляете текст перед последним символом в текстовом поле, GetPositionFromCharIndex обновляется.
Не знаю, можете ли вы использовать это в своих интересах, но я думаю, вы могли бы это знать.
Изменить: Хорошо , LOL, похоже, это работает, насколько это может быть уродливо ...:
Point pt = textBox1.GetPositionFromCharIndex(textBox1.SelectionStart > 0 ? textBox1.SelectionStart - 1 : 0);
Редактировать 2: Оглядываясь назад, я думаю, что поведение не такое уж странное, поскольку SelectionStart в конце текстового поля возвращает индекс, в котором будет набран следующий символ, а не там, где на самом деле находится последний символ. Поскольку GetPositionFromCharIndex вернет позицию символа, индекс еще не существующего char, очевидно, возвращает 0,0.
Редактировать 3: С моим и MikeJ '
В событии 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
задерживается и не обновляется немедленно. Частично это связано с тем, как элемент управления текстового поля обрабатывает ввод с клавиатуры.