winForm控件容器中控件的获取

SeaHome81 工程师  2015-09-22 09:42:07
这段时间在试着做海康sdk的二次开发,现在有两个form(mainform,addform),mainform上有个treeview控件,此控件放在groupbox控件里。现在我要通过点击addform上的button,完成对mainform上treeview的操作。

我通过mainform中button点击事件来显示addform:
addform frm = new addform(this);//将mainform传递给addform
frm.ShowDialog();

在addform重载构造函数:
public addform(mainform mainfrm)
{ mainf = mainfrm; }//mainf已定义

然后在addform里的button点击事件中:
treeview tv_dvr = (treeview) mainf.controls["tv_dvr"];
tv_dvr.nodes[0].nodes.add("test");

现在问题出在 (treeview) mainf.controls["tv_dvr"]获取不到mainform上的name为"tv_dvr"的treeview,这个mainf已经获取到了,就是mainform,是不是因为这个treeview在groupbox里,所以要写成:
treeview tv_dvr = (treeview) mainf.controls["groupbox_tv"].controls["tv_dvr"];//groupbox_tv为存放treeview控件的groupbox的name
这样才能获取到?

望各位大侠赐教!谢谢!
...全文
126 点赞 收藏 6
写回复
6 条回复
SeaHome81 2015年09月24日
感谢各位帮忙!
回复 点赞
为轮子而生 2015年09月23日
首先你的猜测是正确的,只能从它的每层父级依次检索,这个顺序没有捷径。 但检索的效率是非常低的,每次你调用这个TreeView都要这样检索并转换的话,是非常不负责任的。 通常可以用这几种方法进行优化: 1.将这个TreeView设置为public,从而使它可以在别的类中直接访问 2.可以继续使用检索,但这个检索最好由mainform自己来做,且检索完成后就记住它,避免这样的开销重复发生
回复 点赞
失落的神庙 2015年09月23日
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
//获取右键点击
            if (e.Button == MouseButtons.Right)
            {               
                e.Node.BeginEdit();               
            }
             
        }
        
        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
             
          //这里写你想更新到数据库的内容和相关的方法
            //发回数据到数据库
        }
这样不行么。 直接编辑。 都不用弹窗。
回复 点赞
devmiao 2015年09月22日
this.容器.controls["xxx"]
回复 点赞
健者天行 2015年09月22日
这么麻烦, 你直接把 mainform的 treeview控件设置为 public 就可以啦。
回复 点赞
crystal_lz 2015年09月22日
不知道你窗体的布局 谁会知道 你的控件在那里 假设 你 Form1 里面有一个 pannel 而 里面放着一个button 你以为 那个 button 是在 Form1.Controls["button1"] 里面? 其实 他是在 Form1.Controls["pannel1"].Controls["button1"]...
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告