如何在c#中的mouseclick事件中自动隐藏面板

时间:2017-03-08 09:31:05

标签: c# winforms mouseclick-event

如何在mouseclick Windows应用程序中的c#事件上滑动面板 我试过这个

panel1.Location = new Point(panel1.Location.X - i, panel1.Location.Y);
System.Threading.Thread.Sleep(10);

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要将面板向左移动。在这种情况下,你可以这样写:

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    //declare step in pixel which will be used to move panel
    int xMoveStep = 3;
    //repeat this block of code until panel is hidden under form's left border, until 
    //panels top right is less than 0
    while (this.panel1.Right > 0)
    {
        //move it to left
        this.panel1.Left = this.panel1.Left - xMoveStep;
        //pause for 10 milliseconds
        Thread.Sleep(10); 

    }
}

答案 1 :(得分:0)

您应该使用Timer并在每个刻度线上对对象进行一些操作。

Timer m_Timer = null; // placeholder for your timer

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    if(m_Timer != null) return; 
    // if timer is not null means you're animating your panel so do not want to perform any other animations

    m_Timer = new Timer(); //  instantiate timer
    m_Timer.Interval = 1000 / 30; // 30 frames per second;
    m_Timer.Tick += OnTimerTick; // set method handler
    m_Timer.Start(); // start the timer
}

int m_CurrentFrame = 0; // current frame 

void OnTimerTick(object sender, EventArgs e)
{
    const int LAST_FRAME_INDEX = 150; // maximum frame you can reach

    if(m_CurrenFrame > LAST_FRAME_INDEX) // if max reached
    {
        m_Timer.Stop();  // stop timer
        m_Timer.Dispose(); // dispose it for the GC
        m_Timer = null; // set it's reference to null
        m_CurrentFrame = 0; // reset current frame index
        return; // return from the event
    }

    this.Invoke(new MethodDelegate( () => { // invoke this on the UI thread
        panel1.Location = new Point(panel1.Location.X - m_CurrenFrame, panel1.Location.Y); 
    });
    m_CurrentFrame++; // increase current frame index
}

答案 2 :(得分:0)

这应该有效,请尝试此代码

private void frmTest_MouseMove(object sender, MouseEventArgs e)
{
  if (e.Location.X >= panel1.Bounds.X && e.Location.X <= (panel1.Bounds.X + panel1.Bounds.Width) && e.Location.Y >= panel1.Bounds.Y && e.Location.Y <= (panel1.Bounds.Y + panel1.Bounds.Width))
  {
    panel1.Visible = false;
  }
  else
  {
    panel1.Visible = true;
  }
}

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
  panel1.Visible = false;
}