A窗体和B窗体移动A窗体,B窗体也移动. B窗体的宽度由A窗体控制。 就像QQ音乐一样  点乐库时,显示第二个窗体!

解决方案 »

  1.   

    正好前段时间有做类似的东西,看对你有帮助么。/// <summary>
            /// 移动
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MyMouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                Control lCtrl = (sender as Control);
                if (e.Button == MouseButtons.Left)
                {
                    #region textBox 跟随拖动
                    int info = lCtrl.Name.IndexOf("btn");
                    string name = lCtrl.Name.Substring(3, lCtrl.Name.Length - 3);
                    Control txtCtrl = null;
                    foreach (Control btnControl in panelStorage.Controls)//btn控制在此获得新坐标
                    {
                        if (btnControl.Name.Equals("txt" + name))
                        {
                            txtCtrl = btnControl;
                        }
                    }
                    #endregion
                    switch (m_MousePointPosition)
                    {
                        case EnumMousePointPosition.MouseDrag:
                            //判断不能超出界限
                            int txtWidth = txtCtrl.Size.Width+5;
                            int left = lCtrl.Left + txtWidth + e.X - p.X;
                            int Top = lCtrl.Top + e.Y - p.Y;
                            int cWidth = lCtrl.Size.Width;
                            int cHeight = lCtrl.Size.Height;
                            if (Top <= 0)//上边距
                            {
                                Top = 0;
                            }
                            if (Top + cHeight >= Pheight)//下边距
                            {
                                Top = Pheight - cHeight;
                            }
                            if (left<=0)//左边距
                            {
                                left = 0;
                            }
                            if (left + cWidth + txtWidth >= Pwidth)//右边距
                            {
                                left = Pwidth - cWidth - txtWidth;
                            }
                            lCtrl.Left = left;
                            lCtrl.Top = Top;
                            txtCtrl.Left = left + cWidth + 5;
                            txtCtrl.Top = Top;
                            txtCtrl.Text = left + "," + Top;
                            break;
                        default:
                            break;
                    }                if (lCtrl.Width < MinWidth) lCtrl.Width = MinWidth;
                    if (lCtrl.Height < MinHeight) lCtrl.Height = MinHeight;
                    
                }
                else
                {
                    m_MousePointPosition = MousePointPosition(lCtrl.Size, e); //'判断光标的位置状态
                    switch (m_MousePointPosition) //'改变光标
                    {
                        case EnumMousePointPosition.MouseSizeNone:
                            this.Cursor = Cursors.Arrow;       //'箭头
                            break;
                        case EnumMousePointPosition.MouseDrag:
                            this.Cursor = Cursors.SizeAll;     //'四方向
                            break;
                        case EnumMousePointPosition.MouseSizeBottom:
                            this.Cursor = Cursors.SizeNS;      //'南北
                            break;
                        case EnumMousePointPosition.MouseSizeTop:
                            this.Cursor = Cursors.SizeNS;      //'南北
                            break;
                        case EnumMousePointPosition.MouseSizeLeft:
                            this.Cursor = Cursors.SizeWE;      //'东西
                            break;
                        case EnumMousePointPosition.MouseSizeRight:
                            this.Cursor = Cursors.SizeWE;      //'东西
                            break;
                        case EnumMousePointPosition.MouseSizeBottomLeft:
                            this.Cursor = Cursors.SizeNESW;    //'东北到南西
                            break;
                        case EnumMousePointPosition.MouseSizeBottomRight:
                            this.Cursor = Cursors.SizeNWSE;    //'东南到西北
                            break;
                        case EnumMousePointPosition.MouseSizeTopLeft:
                            this.Cursor = Cursors.SizeNWSE;    //'东南到西北
                            break;
                        case EnumMousePointPosition.MouseSizeTopRight:
                            this.Cursor = Cursors.SizeNESW;    //'东北到南西
                            break;
                        default:
                            break;
                    }
                }
            }
      

  2.   


    #region 注册对应事件
                            btn.MouseDown += new System.Windows.Forms.MouseEventHandler(MyMouseDown);
                            btn.MouseLeave += new System.EventHandler(MyMouseLeave);
                            btn.MouseMove += new System.Windows.Forms.MouseEventHandler(MyMouseMove);
                            #endregion
    private enum EnumMousePointPosition
            {
                MouseSizeNone = 0, //'无
                MouseSizeRight = 1, //'拉伸右边框
                MouseSizeLeft = 2, //'拉伸左边框
                MouseSizeBottom = 3, //'拉伸下边框
                MouseSizeTop = 4, //'拉伸上边框
                MouseSizeTopLeft = 5, //'拉伸左上角
                MouseSizeTopRight = 6, //'拉伸右上角
                MouseSizeBottomLeft = 7, //'拉伸左下角
                MouseSizeBottomRight = 8, //'拉伸右下角
                MouseDrag = 9 // '鼠标拖动
            }
    /// <summary>
            /// 拖动事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MyMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                p.X = e.X;
                p.Y = e.Y;            p1.X = e.X;
                p1.Y = e.Y;
            }
     /// <summary>
            /// 鼠标离开
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MyMouseLeave(object sender, System.EventArgs e)
            {
                m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
                this.Cursor = Cursors.Arrow;
            }
    /// <summary>
            /// 鼠标在不同位置的样式
            /// </summary>
            /// <param name="size"></param>
            /// <param name="e"></param>
            /// <returns></returns>
            private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e)
            {            if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))
                {
                    if (e.X < Band)
                    {
                        if (e.Y < Band) { return EnumMousePointPosition.MouseSizeTopLeft; }
                        else
                        {
                            if (e.Y > -1 * Band + size.Height)
                            { return EnumMousePointPosition.MouseSizeBottomLeft; }
                            else
                            { return EnumMousePointPosition.MouseSizeLeft; }
                        }
                    }
                    else
                    {
                        if (e.X > -1 * Band + size.Width)
                        {
                            if (e.Y < Band)
                            { return EnumMousePointPosition.MouseSizeTopRight; }
                            else
                            {
                                if (e.Y > -1 * Band + size.Height)
                                { return EnumMousePointPosition.MouseSizeBottomRight; }
                                else
                                { return EnumMousePointPosition.MouseSizeRight; }
                            }
                        }
                        else
                        {
                            if (e.Y < Band)
                            { return EnumMousePointPosition.MouseSizeTop; }
                            else
                            {
                                if (e.Y > -1 * Band + size.Height)
                                { return EnumMousePointPosition.MouseSizeBottom; }
                                else
                                { return EnumMousePointPosition.MouseDrag; }
                            }
                        }
                    }
                }
                else
                { return EnumMousePointPosition.MouseSizeNone; }
            }
      

  3.   

    貌似qq音乐没有用过 用的酷狗、、你想让B跟着A移动?、、那么 A窗体的move事件里面 让B跟着移动啊
    不过前一段时间研究了一下 关于千千静听的磁铁窗体的效果、、不过貌似并不怎么完美
    http://blog.csdn.net/crystal_lz/article/details/7250229
    不知道怎么让两个窗体 处于同一置顶级别
      

  4.   

    谢谢  问题解决了.   在A  窗体中声明一个   静态事件.  然后在B中注册它   A体中执行相应的操作就激活该事件  原满解决