none
Excluir um TabItem em run Time RRS feed

  • Pergunta

  • Pessoal, criei um TabItem em runtime da seguite forma

    public void CriaTab(string pHeader, string pName, object pForm) {

       TabItem cadcli = new TabItem();

       cadcli.Content = pForm;

       cadcli.Header = pHeader;

       cadcli.Name = pName;

       TabControl1.Items.Add(cadcli);

    }

    onde o "pForm" e um UserControl. Pois bem, quando preciso remove-lo tambem em runtime uso este codigo
    if ( (TabControl1.Items.Count > 1) && ( TabControl1.Items.CurrentPosition > 0 ) )

    {

         TabControl1.Items.Remove(TabControl1.Items.CurrentItem);

    }

    porem se eu tentar cria-lo novamente, da um erro na linha.: " cadcli.Content = pForm; "
    onde esta o erro, quem pode me dar uma dica

    Valeu. 


    domingo, 8 de fevereiro de 2009 13:15

Respostas

  • Na hora de remover o tab, limpe seu conteúdo. Creio que isso resolva:

    if ((TabControl1.Items.Count > 1) && (TabControl1.Items.CurrentPosition > 0))
    {
      TabItem tab = (TabItem)TabControl1.Items.CurrentItem;
      tab.Content = null;
      TabControl1.Items.Remove(TabControl1.Items.CurrentItem);
    }
    quarta-feira, 20 de maio de 2009 14:34

Todas as Respostas

  • Olá Otoni,

    - Qual é a mensagem de erro, exatamente?
    - Pode mostrar como você está fazendo a chamada ao método CriarTab?

    Abraços,
    Caio Proiete


    Caio Proiete
    http://www.caioproiete.com
    segunda-feira, 9 de fevereiro de 2009 13:52
    Moderador
  • Ola Caio,

    a Chamada está sendo feita assim.:

    .....

    public partial class Window1

    {

          FrCadCli frcadcli = new FrCadCli();

    ......

    private void MnuCadCli_Click(object sender, RoutedEventArgs e) {

    // Verifico se o TabItem já exite
    if
    (TabControl1.Items.OfType<TabItem>().FirstOrDefault(tab => tab.Header.ToString() == "Cliente") == null)

    {

        // chamo o métdo  
        CriaTab(
    "Cliente","FrCadCli", frcadcli);

    }

    // vou para o tabitem criado
    TabControl1.SelectedItem = TabControl1.Items.OfType<
    TabItem>().First(tab => tab.Name.ToString() == "FrCadCli");

    }

    -----------------------------------------------------------------------------------------------

    // o erro q/ é gerado quando eu tento criar novamente o Tabitem, anteriormente removido.

    {"Specified element is already the logical child of another element. Disconnect it first."}

    Caio, eu entendi o erro, mais não sei como resolve-lo.


    Valeu, Mauro.

    segunda-feira, 9 de fevereiro de 2009 15:51
  • Na hora de remover o tab, limpe seu conteúdo. Creio que isso resolva:

    if ((TabControl1.Items.Count > 1) && (TabControl1.Items.CurrentPosition > 0))
    {
      TabItem tab = (TabItem)TabControl1.Items.CurrentItem;
      tab.Content = null;
      TabControl1.Items.Remove(TabControl1.Items.CurrentItem);
    }
    quarta-feira, 20 de maio de 2009 14:34