c#如何获取子控件在父容器的位置

杨友山
博客专家认证
2011-09-16 03:20:52
自定义了一个控件,要在这个自定义控件中写一些方法,在里面有个事件显示个panel,这个panel的位置要在自定义控件内的一个label位置。

但是我定义的

int x = this.label1.Location.X;
int y = this.label1.Location.Y + this.label1.Height;
panel.Location = new Point(x, y);

结果显示到父窗体中,就直接是0,0,也就是这个label1在自定义控件中的位置坐标。

现在怎样,在这个自定义控件中,就能获取的到该自定义控件在父窗体的坐标呢,谢谢啦

在线等待... ...
...全文
1461 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiadabaijin 2012-10-09
  • 打赏
  • 举报
回复
看你的需求要干什么,最好的是通过事件来传递
自定义空间中
public partial class TaskConnten : UserControl
{
public delegate void EventDelegate(object sender, EventArgs e);

public event EventDelegate DeleConnten;
public TaskConnten()
{}
private void Coles_Paint(object sender, EventArgs e)
{
MessageBox.Show("你确定要删除该任务吗");
try
{
if (DeleConnten != null)
{
DeleConnten(this, new EventArgs());
}
}
catch(Exception x)
{

}
}
}

窗体中
生窗体
public void ShowData()
{
TaskConnten tc = new TaskConnten(T,inter);
tc.DeleConnten += new TaskConnten.EventDelegate(DeleConnten);

this.panel1.Controls.Add(tc);
tc.Top = (this.panel1.Controls.count-1) * tc.Size.Height;
tc.Show();
}
触发事件后执行的方法
public void DeleConnten(object sender,EventArgs e)
{
TaskConnten deleObjer = sender as TaskConnten;
this.panel1.Controls.Clear();
for (int i = 0; i < tcs.Count;i++ )
{
if (tcs[i] == deleObjer || tcs[i].IsDisposed)
{
tcs.Remove(tcs[i]);
deleObjer.Dispose();
//i = i - 1;
}
if (tcs.Count > 0)
{
this.panel1.Controls.Add(tcs[i]);
tcs[i].Top = i * tcs[i].Size.Height;
tcs[i].Show();
}
}
}
杨友山 2011-09-21
  • 打赏
  • 举报
回复
杨友山 2011-09-16
  • 打赏
  • 举报
回复
解决了,这样用是没问题的,只是我想用用this.FindForm()取代this.Parent,this.FindForm().Controls.Add(panel);加的就不对
换this.Parent.Controls.Add(panel)就行了。
本来我还想换个新的属性用用,结果就成这了。
myceolzy 2011-09-16
  • 打赏
  • 举报
回复
你在可以 自定义控件中,建一个方法,每一次打开窗体后执行一次。
如:

public void UpdatePanelLocation()
{
int x = this.label1.Location.X;
int y = this.label1.Location.Y;
this.panel1.Location = new Point(x, y);
}

然后在:
private void Form1_Load(object sender, EventArgs e)
{
this.userControl11.UpdatePanelLocation();
}
y315728570 2011-09-16
  • 打赏
  • 举报
回复
没看明白.... - -
杨友山 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jacksonjian 的回复:]
实例化父窗体。
传到子窗体中。
[/Quote]

这貌似不好吧,不符合mvc啊
阿建像熊猫 2011-09-16
  • 打赏
  • 举报
回复
实例化父窗体。
传到子窗体中。

111,094

社区成员

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

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

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