各位同僚,小弟以前没有开发过winform项目,在这次做的项目中我遇到一个问题,有两个用户控件窗体 在单击用户窗体(form1)中的TreeView 的每一个节点时把用户窗体(form2)添加到group容器中,然后在form2窗体中执行删除或修改,如何刷新form1窗体中的TreeView控件

解决方案 »

  1.   

    这种当然是使用事件+委托来实现了。
    比如:在Form2中定义一个事件
    OnAdd;   //添加结点时。然后在初始化Form2时一定要用Form1中的某个函数订阅这个事件,比如:
    Form2 f2 = new Form2();
    f2.OnAdd += this.AddNode();在Form2的窗口中,添加结点时产生事件。
    比如:
    private void AddSomeThing()
    {
       //... Do Add Something
       if(OnAdd!=null)OnAdd(...);   //我没写,可以带参数的
    }这样你的主窗口就能收到这个事件了。
      

  2.   

    我写了一个,你看看。这个是你要求的那个Form2。里面定义了相关的委托和事件。    public partial class OptForm : Form
        {
            public delegate void OptEvent(string s);        private string s = "";        public event OptEvent OnAdd;
            public event OptEvent OnDel;
            public event OptEvent OnEdit;        public OptForm()
            {
                InitializeComponent();
            }        private void btnAdd_Click(object sender, EventArgs e)
            {
                s += textBox1.Text;
                if (OnAdd != null) OnAdd(s);
            }        private void btnEdit_Click(object sender, EventArgs e)
            {
                s = textBox1.Text;
                if (OnEdit != null) OnEdit(s);
            }        private void btnDel_Click(object sender, EventArgs e)
            {
                s = "";
                if (OnDel != null) OnDel(s);
            }
        }这是主窗口里的代码:private void UpdateTextBox(string s)
    {
        textBox1.Text = s;
    }private void button2_Click(object sender, EventArgs e)
    {
        OptForm of = new OptForm();
        /*
         添加所有事件的句柄。
          逻辑呢就是每次操作之后都显示OptForm中s的值。
         */
        of.OnAdd += UpdateTextBox;    
        of.OnEdit += UpdateTextBox;
        of.OnDel += UpdateTextBox;
        of.Show();
    }
    这两段代码已经可用了!编译通过了。
      

  3.   

    如何刷新form1窗体中的TreeView控件
    -----------
    完成你的增删改操作后.重新调用你构建TreeView节点的方法即可.就相当于重新加载一次数据
      

  4.   

    你首先把选中的TreeView 的节点记录下来,编辑完毕或者点删除。就执行SQL语句在数据库里面执行。
    然后你关闭第二个窗体,肯定要刷新一次第一个窗体的,刷新第一个窗体可以使用SHOW,或者其他的方法。在那个方法里面,
    再写一次你第一次加载TreeView 节点的方法,这样就完成刷新了