Скрытие формы, когда находятся другие элементы управления - PullRequest
2 голосов
/ 14 февраля 2012

Этот вопрос относится к этому моему вопросу . Теперь у меня есть форма в моем классе, и когда пользователь нажимает кнопку, я показываю (или скрываю) форму. Это нормально. Но я хочу скрыть форму, когда я двигаюсь с формой происхождения или когда я щелкаю где-нибудь в форме происхождения. Новая форма находится за этой формой происхождения. Я пробовал такие события, как lostfocus и другие, но это не помогло. Поэтому я думаю, что мне нужен какой-то трюк, который проверял бы из моего контроля, был ли клик в форме parrent (исходная форма) или какой-то другой взлом. Я знаю, лучше всего было бы, чтобы я поместил код, но у меня много строк, поэтому я думаю, что лучший способ будет, если вы поможете мне в общих чертах, а затем я попытаюсь применить его к своему приложению.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2012

Вы можете сделать это с помощью глобальной мыши и клавиатуры hook .Фактически, он был упакован в хорошо документированный, хорошо структурированный .NET API на CodePlex

Перейдите туда и загрузите его.Затем настройте глобальный хук мыши:

    _mouseListener = new MouseHookListener(new GlobalHooker());
    _mouseListener.MouseMove += HandleGlobalHookMouseMove;
    _mouseListener.Start();

Ключ в том, что вы получите событие MouseMove ЛЮБОЕ время, когда мышь перемещается ЛЮБОЕ на рабочем столе, а не только в пределах вашего окна.

 private void HandleAppHookMouseMove(object sender, MouseEventArgs e)
 {

        if (this.Bounds.Contains(e.Location))
        {
              HandleEnter();
        }
        else
        {
              HandleLeave();
        }          
  }

Вы также можете настроить один для MouseClick.Сочетание этих двух параметров позволит вам определить, когда мышь перемещается над исходной формой, или когда щелкает указатель мыши над ней.В отличие от LostFocus и других событий, которые вы пробовали, фокус не имеет значения.

0 голосов
/ 21 февраля 2012

Помогает ли ниже?

public partial class Form1 : Form
{
    Form f2 = new Form2();
    public Form1()
    {
        InitializeComponent();
        f2.Show();
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.ClientRectangle.Contains(e.Location) && f2.Visible) { f2.Hide(); }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        f2.Visible = !f2.Visible ? true : false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...