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的属性,怎么来实现?
}
...全文
336 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)
本文根据时下最火小游戏微信跳一跳,编写的物理外挂,实现简单,具有DIY精神的都能迅速上手。废话不多说,先来点视频开开胃。 哈哈哈,是不是很爽很刺激,好了,不吊胃口了,还是整点干货吧。 准备1:手机一部,电脑端下载好投屏软件,苹果的airplay,安卓的忘了,自己找下,嘻嘻嘻。。。。 准备2:搞电子的才有,继电器模块一个,随便什么开发版一块,有串口就行,usb转串口模块一个。 准备3:电脑上装上我提供的“跳一跳物理外挂.exe",这个才是核心,后面我会贴源码,low不low不要紧,关键好用,我花了一天时间学的,代码拙劣,慎看,/呲牙。 准备工作做完了,现在开始动工,先做物理部。 首先拿出你的继电器模块,然后把继电器给削了(捂嘴笑)哈哈,我也不知道怎么告诉你怎么削,还是给个图吧。 哎吆我去,这图这么大的咧,将就看看。反正就是把继电器的壳子给拿掉。温馨提醒:用刀的时候注意点,手弄破没事,别把继电器线圈削了(幸灾乐祸的笑呵呵) 然后呢,找个导电的,有电容的,弹簧呀,电容笔呀,或者湿海绵呀。。。一切可以让手机触摸屏反应的材料都行,就是要小一点。 反正我是找了个弹簧,还把它焊在了继电器的活动片上。不会的,看图,下面没图,还是上面那张。 硬件部还差个单片机,这个你们都会的,专业的嘛,随便整个单片机最下系统就行,带个串口,协议我告诉你简单。 帧头32位的最高8位后8位后8位后8位 ‘A’00000000 看到没,接收到串口数据后,把除了'A' 之外的四个8位的数据合并成一个32位的数据,这个合并后的数据,就是ms,是多少就是多少ms。 简单吧,单片机只要接收到这组串口数据,就可以进行操作了,(忘了说了波特率115200 ,8,0,1,我想大家都看得懂,不解释了。) 主程序代码如下: if(收到串口发来的数据) { 将4个字节接收到的数据转化为32位的数据; 继电器置1或者置0(看你电路了,让它按下去就行,模拟按下动作); 延时(xx ms);(这就是那个32的数据) 继电器置1或者置0(看你电路了,让它抬起来就行,模拟抬起动作); } 实在不会的,也没事,我不是还有程序源码的嘛; 好了好了,硬件就到这了,整点软件的。软件c#写的,高手的话,简单,随便你们喷,反正我也不熟,就学了一天,整成这样,自认为还行。 源码,我会贴上去,别。 操作部。我是鼠标左键点击确定起点位置,鼠标右键点击确定终点位置。也就是说,你想跳,那就鼠标左键点起点,鼠标右键点终点。根据距离计算时间。软件上,有个系数,用来确定不同电脑,不同辨率的,自己调试下, 一致就行。截图截图,看图看图。 先打开这个软件,苹果的airplay,然后打开手机,选择airplay镜像。然后将软件全屏。 打开我的那个"跳一跳物理外挂.exe", 选择串口后,就点连接,没啥问题是不会有任何提示的。有问题就报错了。(哈哈哈,仰天长啸中) 下面这个框 3.5,这个就是系数了,要将我的这个软件和投上去的界面重合,这样才行。然后你试试鼠标左键,鼠标右键,看看你的继电器会不会动。(不会动就是你程序有问题,硬件有问题,电脑有问题,反正我的是好的,我不管,自己检查) 还有就是,这个软件是由两个窗体组成的,一个透明的,一个透明有边框的,别问我为什么,因为我不知道如何设置透明鼠标不穿透,你也不知道呀,哈哈哈(鬼畜中),会的私信我,我学一下。所以,如果点击的时候会触发这个软件后面的东西,那么请点击任务栏中,将窗体设置到最前,其实就是获取热点了,其实就是激活窗口啦,笨呢,点不到说明窗口不在激活状态嘛。 好了,不说了, 下面都是图了,你们自己玩吧。 啰嗦一句,把框框对齐哟,不然跳不准呢。

111,093

社区成员

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

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

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