Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Обновить текущий элемент TreeView при редактирован


Автор: NilovSerge 5.11.2007, 18:28
1)У меня элементы TreeView редактируется в отдельном окне. Отредактировав или создав новый элемент
я хочу свои изменения отобразить в TreeView. Уменя работает вставка нового элемента но при редактировании получаю ошибку:
"No parameterless constructor defined for this object"
Если я не ошибаюсь то редатирование элемента надо так: Клонировать редактируемый обьект запомнить его индекс 
удалить и внеся изменения пересоздать заново
Делаю так:

      if (!isInsert)
      { // edit existing dep
        DepsTreeNode CopyObj = (DepsTreeNode)CurrentNode.Clone(); //Здесь ошибка
        CopyObj._Dep._Name = tbName.Text;
        int CopyObjIndex = DepstreeView.SelectedNode.Index;
        CurrentNode.Remove();
        CurrentNode.Nodes.Insert(CopyObjIndex, CopyObj);
        CurrentNode.Expand();
      }
      else
      {// add new Эта часть работает
        Deps NewDep = new Deps( /*int pDepID*/ this.DepId, /*string pName*/ tbName.Text, /*int pParentDepId*/ this.ParentDepId);
        CurrentNode.Nodes.Add(new DepsTreeNode(NewDep));
        DepsTreeNode NewNode = (DepsTreeNode)CurrentNode.Nodes[CurrentNode.Nodes.Count - 1];
        CurrentNode.Expand(); 
      }


DepsTreeNode это класс наследуемый от TreeNode.
Я просмотрел в MSDN Clone() - у него нет никаких параметров. В чем может быть причина ?



2) двойным кликом на элементе TreeView я загружаю все строки в DataGridView. При этом если убрать фокус с TreeView, то текущий 
элемент не подсвечивается. Как можно выделить текущий элемент TreeView чтоб он был всегда выделен(Возможно картинкой)?




      Заранее спасибо

Автор: 1stain 5.11.2007, 19:36
Цитата(NilovSerge @  5.11.2007,  18:28 Найти цитируемый пост)
Клонировать редактируемый обьект запомнить его индекс удалить и внеся изменения пересоздать заново

зачем столько сложностей?
по-моему проще сделать у своего тринода паблик свойства и отразить их в юзерконтроле, связанном с этим типом нода, оттуда же и редактировать.

Автор: NilovSerge 6.11.2007, 13:19
да действительно проще:
Делаю
        treeView.SelectedNode.Text = "NewText";
и работает...



А насчет 2) и выделении активного TreeNode при фокусироании другого контрола на форме идей нет ?

Автор: 1stain 6.11.2007, 14:14
щас тебе модераторы все объяснят  smile 
пока никого нет, лови код
Код

        private void treeView1_Leave(object sender, EventArgs e)
        {
            treeView1.SelectedNode.BackColor = SystemColors.Highlight;
            treeView1.SelectedNode.ForeColor = SystemColors.HighlightText;
        }

        private void treeView1_Enter(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode == null)
                return;
            treeView1.SelectedNode.BackColor = treeView1.BackColor;
            treeView1.SelectedNode.ForeColor = treeView1.ForeColor;
        }

подпишись в TreeView на соответствующие события

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)