2014-12-31 4 views
2

Я пытаюсь добавить панель при нажатии кнопки. Мой код ниже, и я сделал это. Но теперь я пытаюсь наложить на свою панель другие кнопки и т. Д., И когда вы нажимаете на первую кнопку, и панель слайдов не содержит никаких новых кнопок.Анимированная панель в C#

//Constants 
    const int AW_SLIDE = 0X40000; 
    const int AW_HOR_POSITIVE = 0X1; 
    const int AW_HOR_NEGATIVE = 0X2; 
    const int AW_BLEND = 0X80000; 

     [DllImport("user32")] 

     static extern bool AnimateWindow(IntPtr hwnd, int time, int flags); 
     photosflag=0; 

private void photosbutton_Click(object sender, EventArgs e) 
     { 
      if (photosflag == 0) 
      { 
       object O = Controller.Properties.Resources.ResourceManager.GetObject("photospressed"); 
       photosbutton.Image = (System.Drawing.Image)O; 
       photosflag = 1; 
       int ylocation = photosbutton.Location.Y; 
       //Set the Location 
       photospanel.Location = new Point(101, ylocation); 

       //Animate form 
       AnimateWindow(photospanel.Handle, 500, AW_SLIDE | AW_HOR_POSITIVE); 


      } 
      else 
      { 
       object O = Controller.Properties.Resources.ResourceManager.GetObject("photos"); 
       photosbutton.Image = (System.Drawing.Image)O; 
       photosflag = 0; 
       photospanel.Visible = false; 

      } 


     } 

В фотосъемке у меня есть три фотобумаги. Но когда панель появляется (покачивается), то фотокамер там не существует.

+0

Я не за тобой целиком - ты говоришь, что панель уже созданный в дизайнере, но просто не отображается, пока вы не нажмете кнопку? Если да, уверены ли вы, что другие элементы управления действительно содержатся в панели? - Если вы перемещаете панель в дизайнере, выполняйте ли подэлементы с ней? –

+0

Да. Суб-элементы управления перемещаются с помощью панели. Когда я запускаю приложение, панель видима ложно ... Когда вы нажимаете кнопку, панель видна, но суб-элементы управления не видны (с анимированной панелью). Если я просто напишу panel.Visible = true без анимированного, это покажет мне суб-элементы управления – NickName

+0

Интересно. Я ничего не знаю об анимировании AnimateWindow, но, похоже, с WinForms он не очень хорошо играет. Ваша анимация просто сдвигает ее на место? Если да, не могли бы вы написать свой собственный код .NET для этого? Вы можете использовать таймер для постепенного перемещения его в положение - правильно? –

ответ

5

Хорошо - здесь очень простой пример, который не зависит от AnimateWindow API:

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

У меня есть кнопки и панели (не видны) на форме

Я объявил следующие частные членов по форме - они стартовое положение X панели, конечное положение, и количество пикселей для перемещения по приросту - опять же, подправить влиять на скорость/гладкость/и т.д.

private int _startLeft = -200; // start position of the panel 
private int _endLeft = 10;  // end position of the panel 
private int _stepSize = 10;  // pixels to move 

Затем на кнопку мыши, включить таймер:

animationTimer.Enabled = true; 

Наконец, код в случае клещевого таймер делает панель видимым, перемещает его на место, и отключает себя, когда сделано:

private void animationTimer_Tick(object sender, EventArgs e) 
{ 
    // if just starting, move to start location and make visible 
    if (!photosPanel.Visible) 
    { 
     photosPanel.Left = _startLeft; 
     photosPanel.Visible = true; 
    } 

    // incrementally move 
    photosPanel.Left += _stepSize; 
    // make sure we didn't over shoot 
    if (photosPanel.Left > _endLeft) photosPanel.Left = _endLeft; 

    // have we arrived? 
    if (photosPanel.Left == _endLeft) 
    { 
     animationTimer.Enabled = false; 
    }    
} 
Смежные вопросы