Чтобы ответить на вашу вторую проблему:
Если вы установите для свойства form.StartPosition
значение FormStartPosition.Manual
, тогда вы можете расположить форму на курсоре (например):
form.StartPosition = FormStartPosition.Manual;
form.Location = new Point(Cursor.Position.X - 1, Cursor.Position.Y - 1);
Это может помочь и с вашей первой проблемой.
Если вы хотите, чтобы форма работала как всплывающая подсказка, то, если вы добавите следующий код обработчика событий, он может дать вам желаемое:
private void Form_MouseLeave(object sender, EventArgs e)
{
// Only close if cursor actually outside the popup and not over a label
if (Cursor.Position.X < Location.X || Cursor.Position.Y < Location.Y ||
Cursor.Position.X > Location.X + Width - 1 || Cursor.Position.Y > Location.Y + Height - 1)
{
Close();
}
}
Это объясняет -1
в настройке положения формы. Это гарантирует, что курсор находится на форме при первом отображении.