winform程序中,设置窗体的显示位置

allen12345 2010-10-21 04:35:43
我在一个form中的按钮按下去后,弹出另个窗口,如何让新窗口的显示位置在按钮正下方?
private void btn_SelDW_Click(object sender, EventArgs e)
{
int x, y,h;
SelDWForm dwForm = new SelDWForm();
if (sender is Button)
{
x=(sender as Button).Location.X;
y = (sender as Button).Location.Y;

//dwForm.Left= x;
//dwForm.Top = y;
}

dwForm.ShowDialog();

}
...全文
1558 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnzao 2010-10-22
  • 打赏
  • 举报
回复
由于新弹出的窗体坐标是以当前屏幕为参照系,不能单纯使用按钮在窗体内的坐标来传递,应该使用按钮相对于屏幕的坐标来实现
  private void btn_SelDW_Click(object sender, EventArgs e)
{
int x, y,h;
SelDWForm dwForm = new SelDWForm();
if (sender is Button)
{
x = (sender as Button).PointToScreen(new Point()).X;
y = (sender as Button).PointToScreen(new Point()).Y;
dwForm.Location = new Point(x, y);
}

dwForm.ShowDialog();

}
lrh_079 2010-10-22
  • 打赏
  • 举报
回复
先设置
dwForm.StartPosition = FormStartPosition.Manual;
再设置
dwForm.Location = btn_SelDW.PointToScreen(0, btn_SelDW.Height);
XQSoul 2010-10-22
  • 打赏
  • 举报
回复
使用窗体的Location属性
yu_xiaot 2010-10-22
  • 打赏
  • 举报
回复
正如你说,他们的参照是不一样的。比较简单的转换方法是PointToScreen(),PointToClient()。
就你的问题,只需要PointToScreen(button1.Location)就可以了!

[Quote=引用 10 楼 allen12345 的回复:]

由于新窗口的location值与旧窗口的按钮的location值的参照点不一样(按钮的location值,是相对于它所在的容器来说吧),所以即使他们的location值相等,也不能够整齐排列,我现在需要的是他们相对于屏幕的位置,这样才能设置相应的值。
[/Quote]
allen12345 2010-10-22
  • 打赏
  • 举报
回复
摸了好久都没弄好,help
allen12345 2010-10-22
  • 打赏
  • 举报
回复
由于新窗口的location值与旧窗口的按钮的location值的参照点不一样(按钮的location值,是相对于它所在的容器来说吧),所以即使他们的location值相等,也不能够整齐排列,我现在需要的是他们相对于屏幕的位置,这样才能设置相应的值。
fp2559 2010-10-21
  • 打赏
  • 举报
回复
这个应该不是什么问题,主要是实践一下就知道怎么回事了
不建议空想着发表言论
浪子-无悔 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 husanbo110 的回复:]

先要设置this.StartPosition = FormStartPosition.Manual;
设置窗体的起始位置为手动的
再设置location 才有用
[/Quote]
OK !!!
husanbo110 2010-10-21
  • 打赏
  • 举报
回复
先要设置this.StartPosition = FormStartPosition.Manual;
设置窗体的起始位置为手动的
再设置location 才有用
火柴没帽 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaotiange 的回复:]

取得按钮的LOCATION
在按钮单击事件中设置新窗口的location
[/Quote]
+1
ajq1989 2010-10-21
  • 打赏
  • 举报
回复

int x, y
private void btn_SelDW_Click(object sender, EventArgs e)
{
SelDWForm dwForm = new SelDWForm();
if (sender is Button)
{
x=(sender as Button).Location.X;
y = (sender as Button).Location.Y;

//dwForm.Left= x;
//dwForm.Top = y;
dwForm.Location = new Point(x,y);
dwForm.ShowDialog();

}


}

paperpen 2010-10-21
  • 打赏
  • 举报
回复
顶1楼 2楼 3楼
raymond123456 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaotiange 的回复:]
取得按钮的LOCATION
在按钮单击事件中设置新窗口的location
[/Quote]
ding
qqrto 2010-10-21
  • 打赏
  • 举报
回复
使用窗体的Location属性,通过计算按钮在屏幕中的位置,来实现这个效果
xiaotiange 2010-10-21
  • 打赏
  • 举报
回复
取得按钮的LOCATION
在按钮单击事件中设置新窗口的location

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧