C#动态窗体急!!!分不够加!!!

睡神在睡觉 2008-07-16 04:27:32
对动态创建的窗体上动态创建的控件事件怎么来操作,谢谢了,下面给出部分代码,请大虾指教,分不够加~!!
原窗体中代码:
string GInfo;
private void Next_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Inof = new TextBox();
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
Tabcon.Size = new System.Drawing.Size(238, 269);
work.Controls.Add(Tabcon);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
//在此处设置bt的属性,怎么来实现?
}
...全文
315 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
pennymay 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 assky124 的回复:]
我也在做一个差不多的程序,
解决思路如下:
主窗体 IsMdiContainer = true;
动态生成的窗体为
C# codecForm=newCForm();//cForm为CForm类的窗体cForm.MdiParent=this;
cForm.Show();this.formList.Add(contractForm);//formList 为一个ArrayListcForm.Activated+=newEventHandler(cForm_Activated);

事件
C# codeprivatevoidcForm_Activated(objectsender, System.EventArgs e)
{//contractForm被激…
[/Quote]
睡神在睡觉 2008-07-16
  • 打赏
  • 举报
回复
谢谢各位了,解决了,一直都是我自己把嵌套关系给搞错了,现在明了了,从TabControl中得到控件要一层一层的拔出来,现在明白了,谢谢各位,明天再顶100分再结贴。
assky124 2008-07-16
  • 打赏
  • 举报
回复
我也在做一个差不多的程序,
解决思路如下:
主窗体 IsMdiContainer = true;
动态生成的窗体为

cForm=new CForm(); //cForm为CForm类的窗体
cForm.MdiParent=this;
cForm.Show();
this.formList.Add(contractForm); //formList 为一个ArrayList
cForm.Activated+=new EventHandler(cForm_Activated);


事件

private void cForm_Activated(object sender, System.EventArgs e)
{
//contractForm被激活时产生的事件
cForm=(CForm) sender;
MessageBox.Show(cForm.Text+"我被激活了!")
}
睡神在睡觉 2008-07-16
  • 打赏
  • 举报
回复
确实,楼上几位说的方法我都试过了,单独的Demo中运行的确都行,但是加到程序中总是不进if语句。。莫非添加在TabControl这个控件在窗体上找不到?
czk598478 2008-07-16
  • 打赏
  • 举报
回复


private void button2_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Inof = new TextBox();
Inof.Name = "Inof";
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
Tabcon.Size = new System.Drawing.Size(238, 269);
work.Controls.Add(Tabcon);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
Button bt = sender as Button;
this.GInfo = ((Form)bt.Parent).Controls.Find("Inof",false)[0].Text;
//在此处设置bt的属性,怎么来实现?
bt.Text = "Clicked!!";
}



引用的,但是可以的。
睡神在睡觉 2008-07-16
  • 打赏
  • 举报
回复
string GInfo;
private void Next_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Info = new TextBox();
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);

work.Controls.Add(bt);
work.Controls.Add(Info);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
//在此处设置bt的属性,怎么来实现?
}


从新贴一遍,昨晚上粘来粘去粘乱了,不好意思
chinaicm 2008-07-16
  • 打赏
  • 举报
回复
代码里有一些变量不清楚是那里来的,我修改了一下.

string GInfo;
private void button1_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Info = new TextBox();
Info.Text = "";
Info.Name = "hello";//这里给TextBox的Name赋个值,在下面便于找到
work.Controls.Add(Info);
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
bt.Size = new System.Drawing.Size(238, 269);
bt.Name = "btnhello";
work.Controls.Add(bt);
work.Show();
}

void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
Button btn = sender as Button;
Form form = btn.FindForm();
TextBox tbx = form.Controls["hello"] as TextBox;
GInfo = tbx.Text;
//在此处设置bt的属性,怎么来实现?
Button btnHello = form.Controls["btnhello"] as Button;
}
virusswb 2008-07-16
  • 打赏
  • 举报
回复
这个是可以运行的,看来你需要学的还很多,很多的概念还没有搞清楚,以后先想好在写代码了

string GInfo;
Form work;
private void Next_Click(object sender, EventArgs e)
{
work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Info = new TextBox();
Info.Name = "txtInfo";
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
//Tabcon.Size = new System.Drawing.Size(238, 269);
work.Controls.Add(Info);
work.Controls.Add(bt);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?

foreach (Control c in work.Controls)
{
if (c.Name == "txtInfo")
{
GInfo = c.Text;
MessageBox.Show(GInfo);
break;
}
}
//在此处设置bt的属性,怎么来实现?
((Button)sender).Text = "刚才你点击了我";
}
睡神在睡觉 2008-07-16
  • 打赏
  • 举报
回复
不好意思,刚才没看清,你这样Form work ;来定义成全局的,在窗口初始化的时候不就创建这个窗体了么?关闭了这个窗体还怎么来再创建?刚才试验了下,好像是没获取到创建的work实例
virusswb 2008-07-16
  • 打赏
  • 举报
回复
string GInfo;
private void Next_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Inof = new TextBox();
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
Tabcon.Size = new System.Drawing.Size(238, 269);
work.Controls.Add(Tabcon);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
//在此处设置bt的属性,怎么来实现?
}
你根本就没有把控件加入窗体中啊,你就加了一个tabcon,这是什么东西啊,没有看到定义啊
应该把textbox和button加入啊,就是你的Inof和bt啊,
再说你的错别太多了,开始是inof,后面就是info
slimfeng 2008-07-16
  • 打赏
  • 举报
回复
同意7楼的做法,需要将Form作为全局变量,然后遍历搜索相应控件
smntbk 2008-07-16
  • 打赏
  • 举报
回复
你的button2_Click事件中代码不少问题,能调试过去?
bt_Click事件中,sender对象就是bt,转换类型后可以直接设置其属性(转成TextBox那个判断当然进不去了)。
至于获得TextBox中的值,那就找到bt的父容器Form窗体,用Form.Controls.Find()方法或者直接遍历Form找到TextBox控件对其操作。
LZ以前不少都是关于动态创建控件的帖子,其实如果好好琢磨琢磨诸位的回答,相信在这一块应该没有问题的。
JustLovePro 2008-07-16
  • 打赏
  • 举报
回复
晕,你没看到work的定义写在外边做全局变量吗~~~

string GInfo;
Form work ; //全局变量
private void Next_Click(object sender, EventArgs e)
{
work = new Form(); //这里实例化
work.Name = "frmShip";
work.Text = "轮船卸货作业";

...
...
RichardSzwz 2008-07-16
  • 打赏
  • 举报
回复
支持一下,
上山老人 2008-07-16
  • 打赏
  • 举报
回复
帮顶
qyulang 2008-07-16
  • 打赏
  • 举报
回复
看来楼主仁兄通宵了
smntbk 2008-07-16
  • 打赏
  • 举报
回复
private void button2_Click(object sender, EventArgs e)
{
Form work = new Form();
work.Text = "轮船卸货作业";
work.MaximizeBox = false;
work.MinimizeBox = false;
work.WindowState = System.Windows.Forms.FormWindowState.Maximized;
TextBox Inof = new TextBox();
Inof.Name = "Inof";
Info.Text = "";
GInfo = "";
Button bt = new Button();
bt.Location = new System.Drawing.Point(163, 90);
bt.Size = new System.Drawing.Size(64, 23);
bt.Text = "Begin";
bt.Click += new EventHandler(bt_Click);
Tabcon.Size = new System.Drawing.Size(238, 269);
work.Controls.Add(Tabcon);
work.Show();
}
void bt_Click(object sender, EventArgs e)
{
//在此处将Info.Text此时的值赋给GInfo,怎么实现?
Button bt = sender as Button;
this.GInfo = ((Form)bt.Parent).Controls.Find("Inof",false)[0].Text;
//在此处设置bt的属性,怎么来实现?
bt.Text = "Clicked!!";
}
睡神在睡觉 2008-07-16
  • 打赏
  • 举报
回复
7楼
foreach(Control c in work.Controls) //this-->work
{
if(c is TextBox)
{
TextBox tb = c as TextBox;
GInfo = tb.Text.Trim();
}
}
这里能打出work么?我怎么打不出来?
bj981 2008-07-16
  • 打赏
  • 举报
回复
你可以试下在form_load时加载控件,
然后遍历controls,应可以的
GentleCat 2008-07-16
  • 打赏
  • 举报
回复
楼主之前的贴子的结分很有趣,全部平均给分,SO,不想回答了...

虽然分不多,可是辛苦回答问题却得不到合理的报酬,

既然没有随意,那就算了~
加载更多回复(7)

110,015

社区成员

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

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

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