在主窗体有按扭1和按扭2.
1.按扭点击发生动态生成窗体,并向窗体添加控件。
private void button1_Click(object sender, EventArgs e)
{
Form a = new Form();
a.Name = "动态创建窗体一";
a.Text = "动态创建窗体一";
getform(a);
a.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Form b = new Form();
b.Name = "动态创建窗体二";
b.Text = "动态创建窗体二";
getform(b);
b.Show();
}
///窗体添加控件
private void getform(Form form)
{
FlowLayoutPanel fp1 = new FlowLayoutPanel();
fp1.Location = new Point(0, 0);
fp1.Height = 100;
fp1.Visible = true;
Button bt = new Button();
bt.Text = "登录";
bt.Click += new EventHandler(bt_click);
fp1.Controls.Add(bt);
FlowLayoutPanel fp2 = new FlowLayoutPanel();
fp1.Location = new Point(0, 100);
fp2.Visible = true;
TextBox tb = new TextBox();
tb.Text = "123";
tb.Name = "tbname";
fp2.Controls.Add(tb);
form.Controls.Add(fp1);
form.Controls.Add(fp2);
}
///动态生成窗体的委托事件
private void bt_click(object sender,EventArgs e)
{
怎么获取当前控件的名称和窗体的名称;
}

------解决思路----------------------
这在设计上是越俎代庖的,职责不清的。刚编程的人喜欢空谈“控制、监视”的说法,似乎什么事件驱动都想用一个大循环语句来监视处理一下很爽。
实际上,UI设计是分层的、隔离的。低级的模块(窗体、用户控件、自定义控件、自定义组件、外部进程、系统底层驱动.......)自成服务体系,向上向外而“隔离”,不允许上层纠结它的内部到底用了什么控件,它完全可能随后重构内部设计。它只向上层暴露业务接口。即使是事件委托,也是从业务角度来定义的事件委托,而不是什么控件的。
这方面不是会点技术就能开始搞程序设计的,就好像不是学会点photoshop等工具就能做美工、不是学点office等工具就能当总经理秘书。但是如果你不努力去实践这种“面向业务接口、层间职责分离”的设计,那么设计出来的东西将是多么难用和低级啊。
好的设计师不是在一个低级的“编程培训”课程上学习的。这些软件设计基本知识必须专门学习软件工程课程来得到。
------解决思路----------------------
bt_click(object sender,EventArgs e)
{
Control control = sender as Control;
if(control!=null)
{
var name =control.Name;
do
{
var parent = control.Parent;
if(parent is Form){break;}
}
while(control.Parent !=null);
}
}
这是获取控件及子窗体的,然后怎么通知主窗体就是你要弄个事件或者委托