VS2005中实现两个窗体分离与结合怎么实现呢?像千千静听的播放和列表的分离与结合一样 怎么实现呢??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 发消息,,用event ,但主窗体移动时发坐标给子窗体 网友问我的一个问题:移动一个窗体时如何同时移动另一个窗体?类似winAMP里的效果。其实实现起来也很简单:截获主窗体的WM_MOVE(窗体移动)消息,同时设置附属窗体的位置。代码如下:protected override void WndProc(ref Message m) { const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE ) { if (frm != null) { frm.Left = this.Left + this.Width; frm.Top = this.Top; return; } } base.WndProc(ref m); }frm即附属窗体的对象 主窗体的移动是用MouseMove来获取坐标吗?但是MouseEventArgs怎么传给Message呢? public partial class Form1 : Form { Form f2 = new Form2(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { f2.Show(); } protected override void WndProc(ref Message m) { const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE) f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m); } } 知道为什么了,窗体form1传给from2的坐标是form1上一次的坐标,而不是当前坐标 public partial class Form1 : Form { Form f2 = new Form2(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { f2.Show(); } protected override void WndProc(ref Message m) { const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE) f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m); } } 这个代码form1与form2不能同时移动form2拿到的是form1上一次的移动位置奇怪。。 form1的事件Move来实现就很容易了。 private void FormQuery_Move(object sender, EventArgs e) { testForm.Show(); testForm.Location = new Point(this.Location.X + this.Width, this.Location.Y); } public partial class Form1 : Form { Form f2 = new Form2(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { f2.Show(); } private void Form1_Move(object sender, EventArgs e) { f2.Location = new Point(this.Left + this.Width, this.Top); } protected override void WndProc(ref Message m) { const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE) f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m); } }这样就OK了 public partial class Form1 : Form { Form f2 = new Form2(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { f2.Show(); } private void Form1_Move(object sender, EventArgs e) { f2.Location = new Point(this.Location.X + this.Width, this.Location.Y); }}这样就行了 c# 双屏显示问题 C#因为单元间隔符号而引发的http 400的错误 小菜.求教文本内容替换问题----- 关于线程问题的讨论。 关于建表的奇怪的问题 Marshal.StructureToPtr() 异常 c#实现模拟键盘向网页表单上输入数据? 请大家帮忙推荐几本书 winform下怎么刷新页面? 需要写篇概要设计文档,关于“外部接口”方面应该写哪些内容? <asp.net.2.0开发指南>烂书一本! 自定义控件问题
protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3;
if (m.Msg == WM_MOVE )
{
if (frm != null)
{
frm.Left = this.Left + this.Width;
frm.Top = this.Top;
return;
}
}
base.WndProc(ref m);
}
frm即附属窗体的对象
但是MouseEventArgs怎么传给Message呢?
{
Form f2 = new Form2(); public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
f2.Show();
} protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE)
f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m);
}
}
{
Form f2 = new Form2(); public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
f2.Show();
} protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE)
f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m);
}
}
这个代码form1与form2不能同时移动
form2拿到的是form1上一次的移动位置奇怪。。
{
testForm.Show();
testForm.Location = new Point(this.Location.X + this.Width, this.Location.Y);
}
{
Form f2 = new Form2();
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
f2.Show();
}
private void Form1_Move(object sender, EventArgs e)
{
f2.Location = new Point(this.Left + this.Width, this.Top);
}
protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE)
f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m);
} }
这样就OK了
{
Form f2 = new Form2();
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
f2.Show();
}
private void Form1_Move(object sender, EventArgs e)
{
f2.Location = new Point(this.Location.X + this.Width, this.Location.Y);
}
}这样就行了