2015-06-12 20 views
1

Я разрабатываю приложение формы Windows на C#. У меня есть большая кнопка «MainButton», которая имеет фоновое изображение, чтобы отразить его основные функции. Внутри этой основной кнопки я включил 3 другие маленькие кнопки, которые я назвал «CreatButton», «UpdateButton» и «DisplayButton».Нажмите «Событие кнопки над другим после изменения видимости»

Когда пользователь перемещает мышь внутри большой кнопки, я показываю все маленькие кнопки, иначе, когда мышь покидает большую кнопку, я прячу маленькие кнопки. См. Код ниже.

МОЯ проблема в том, что когда пользователь перемещает мышь внутри большой кнопки, события нажатия маленьких кнопок не работают.

Примечание: Я также попытался заменить большую кнопку на окно с картинкой, но, к сожалению, он не работал.

Любая помощь действительно оценена.

private void MainButton_MouseEnter(object sender, EventArgs e) 
    { 
     CreateButton.Visible = true; 
     UpdateButton.Visible = true; 
     DisplayButton.Visible = true; 
    } 

    private void MainButton_MouseLeave(object sender, EventArgs e) 
    { 
     CreateButton.Visible = false; 
     UpdateButton.Visible = false; 
     DisplayButton.Visible = false;   
    } 

    private void CreateButton_Click(object sender, EventArgs e) 
    { 
      // do something .. 
    } 

    private void UpdateButton_Click(object sender, EventArgs e) 
    { 
      // do something .. 
    } 

    private void DisplayButton_Click(object sender, EventArgs e) 
    { 
      // do something .. 
    } 
+0

У данного пользователя отсутствует какая-либо ошибка? –

ответ

1

Вы можете использовать панель управления с изображением фона. Просто имейте в виду, что если вы используете Mouse_Leave на панели управления, тогда, когда вы наводите курсор на кнопку, будет запущено событие панели Mouse_Leave, и кнопки будут мигать и выключаться, и вы ничего не сможете сделать.

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

[System.Runtime.InteropServices.DllImport("user32.dll")] 
    private static extern IntPtr WindowFromPoint(Point pnt); 

    private void panel1_MouseLeave(object sender, EventArgs e) 
    { 
     IntPtr hWnd = WindowFromPoint(Control.MousePosition); 
     if(hWnd !=IntPtr.Zero) 
     { 
      Control control = Control.FromChildHandle(hWnd); 
      if (control != null) 
      { 
       if(control==buttonOne || control==buttonTwo || control==buttonThree) 
        return; 
      } 
     } 

     this.buttonOne.Visible = false; 
     this.buttonTwo.Visible = false; 
     this.buttonThree.Visible = false; 
    } 

    private void panel1_MouseEnter(object sender, EventArgs e) 
    { 
     this.buttonOne.Visible = true; 
     this.buttonTwo.Visible = true; 
     this.buttonThree.Visible = true; 
    } 

    private void button_Click(object sender, EventArgs e) 
    { 
     Control control=(Control)sender; 
     MessageBox.Show(control.Text); 
    } 
+0

благодарит Чарли, что действительно решил проблему, НО еще одна вещь на панели покидает событие, три кнопки исчезают один за другим медленно. Интересно, есть ли способ заставить их исчезнуть быстрее и вместе. Еще раз спасибо. –

+0

Я не вижу этого в коде, который я сделал. Вы делаете что-нибудь еще во время отпуска? Не могли бы вы разместить свой код, и я посмотрю – Charlie

Смежные вопросы