C# 粘连窗体效果(窗体连动 类似千千静听播放器的)

来源:互联网 发布:照片打印软件下载 编辑:程序博客网 时间:2024/06/10 01:25

两个窗体分别是FormMain FormList

第1个窗体:FormMain :

public partial class FormMain : Form
{

FormList formlist=null ;

public FormMain()
{

FormMain fm = this;
formlist = new FormList(ref fm);//传到第2个窗体去

InitializeComponent();
}

public bool isLinked ;
private void FormMain_Load(object sender, EventArgs e)
{

Application.DoEvents();
formlist.Show();
isLinked = false;
formlist.Left = this.Left + this.Width+20;//开始分开点,也可以不分开不要20
formlist.Top = this.Top;
this.Show();

}

private void FormMain_LocationChanged(object sender, EventArgs e)
{

int fltop = formlist.flTop;


if (formlist == null) { return; }

// 一起移2个窗体
if (isLinked || Math.Abs(this.Left + this.Width - formlist.Left) <= 15)
{

formlist.Left = this.Left + this.Width;
// formlist.Top = this.Top;
formlist.Top = this.Top - (fltop);


isLinked = true;
return;


}


isLinked = false;


}

}

---------------------------------------------------------------------------------------------

第2个窗体:FormList

public partial class FormList : Form
{
public FormList()
{
InitializeComponent();

ClassCommon.com_FormList = this;

}
public FormList(ref FormMain fm)
{
_fm = fm;//引用FormMain
InitializeComponent();
}
FormMain _fm = null;

public int flTop = 0;//记录两个窗体高度差
private void FormList_LocationChanged(object sender, EventArgs e)
{
this.Text = this.Location.ToString();
//if (_fm == null) { return; }
flTop = _fm.Top - this.Top;
if (Math.Abs(_fm.Left + _fm.Width - this.Left) <= 15)
{

this.Left = _fm.Left + _fm.Width;


_fm.isLinked = true;

}
else
{

_fm.isLinked = false;
}

}

}

哈哈运行是不是很酷。。。。

别急,要千千静听那样就要设置无边框窗体,要实现拖动

OK ,用下面的加到2个窗体类里:

#region "拖动窗体"
private bool moveFlag = false;
private int x = 0;
private int y = 0;

protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
if (moveFlag && (e.Button == MouseButtons.Left))
this.SetBounds(Left + e.X - x, Top + e.Y - y, this.Width, this.Height);
base.OnMouseMove(e);
}

protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if (!moveFlag && e.Clicks >= 1)
moveFlag = true;
x = e.X;
y = e.Y;
base.OnMouseDown(e);
}

protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
if (moveFlag)
moveFlag = false;
base.OnMouseUp(e);
}


#endregion

自己把界面设计好看点,说不定你能比它还炫呵。

希望对大家有用。

0 0
原创粉丝点击