MSDN > 論壇首頁 > C# > Evitar expandir Node ao clicar no sinal [+]
發問發問
 

已答覆Evitar expandir Node ao clicar no sinal [+]

  • 2009年3月28日 下午 05:47JOAB_ARAUJO 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Pessoal, Meu pedido é simples mas não consegui encontrar no forum.
    Como evitar que os meus nodes, sejam Root ou não, se expandam quando o usuário clicar no sinal de [+] que se encontram a esquerda de cada node?
    Usei este código dbTview.ShowRootLines = false;, mas apenas escondeu o sinal de [+] do Root.

    Agradecido.
    Airton Barros

    JOAB

解答

  • 2009年3月31日 上午 11:52AndreAlvesLima版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆包含代碼

    Nossa, que interessante... Nunca ví ninguém querer fazer isso, mas, enfim, vamos lá... Hehehe...

    Consegui fazer aqui da seguinte maneira (não sei se tem um modo mais fácil... procurei na internet e não consegui achar...):

    - Criei um atributo no form chamado _doubleClick, que vai estar sempre setado como falso, a não ser que um nó seja clicado duplamente;
    - Implementei o evento DoubleClick do TreeView para setar o atributo _doubleClick do form como true e chamar o Expand do nó;
    - Implementei o evento BeforeExpand do TreeView para verificar se o atributo _doubleClick do form está true. Se sim, volta o atributo para false e expande o nó normalmente. Se não, cancela o evento de expand.

    Com isso, o resultado foi o seguinte (código de um form com um TreeView, chamado treeview1):

        public partial class Form8 : Form
        {
            private bool _doubleClick = false;
    
            public Form8()
            {
                InitializeComponent();
            }
    
            private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
            {
                if (!_doubleClick.Equals(true))
                    e.Cancel = true;
                else
                    _doubleClick = false;
            }
    
            private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                _doubleClick = true;
                e.Node.Expand();
            }
        }
    

    André Alves de Lima - http://andrealveslima.spaces.live.com
    • 已標示為解答JOAB_ARAUJO 2009年4月1日 下午 11:07
    •  

所有回覆

  • 2009年3月30日 上午 11:52AndreAlvesLima版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Prezado,

    Como assim? Você quer evitar que a TreeView expanda?
    André Alves de Lima - http://andrealveslima.spaces.live.com
  • 2009年3月30日 下午 11:28JOAB_ARAUJO 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Olá André.
    Quero que o Node se expanda apenas quando der o duplo click no texto do Node e não quando clicar no sinal de [+], por isso solicito um código que anule a ação de expandir o node quando clicar no sinal de [+].

    Agradecido.
    Airton
    JOAB
  • 2009年3月31日 上午 11:52AndreAlvesLima版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆包含代碼

    Nossa, que interessante... Nunca ví ninguém querer fazer isso, mas, enfim, vamos lá... Hehehe...

    Consegui fazer aqui da seguinte maneira (não sei se tem um modo mais fácil... procurei na internet e não consegui achar...):

    - Criei um atributo no form chamado _doubleClick, que vai estar sempre setado como falso, a não ser que um nó seja clicado duplamente;
    - Implementei o evento DoubleClick do TreeView para setar o atributo _doubleClick do form como true e chamar o Expand do nó;
    - Implementei o evento BeforeExpand do TreeView para verificar se o atributo _doubleClick do form está true. Se sim, volta o atributo para false e expande o nó normalmente. Se não, cancela o evento de expand.

    Com isso, o resultado foi o seguinte (código de um form com um TreeView, chamado treeview1):

        public partial class Form8 : Form
        {
            private bool _doubleClick = false;
    
            public Form8()
            {
                InitializeComponent();
            }
    
            private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
            {
                if (!_doubleClick.Equals(true))
                    e.Cancel = true;
                else
                    _doubleClick = false;
            }
    
            private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                _doubleClick = true;
                e.Node.Expand();
            }
        }
    

    André Alves de Lima - http://andrealveslima.spaces.live.com
    • 已標示為解答JOAB_ARAUJO 2009年4月1日 下午 11:07
    •  
  • 2009年4月1日 下午 11:06JOAB_ARAUJO 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     包含代碼
    Olá André.
    Muito obrigado e marcarei a reposta como válida.

    Explicação do Pedido.
    =================
    André, meu problema é que estou populando a treeview com 06 tabelas com JOIN e habilitando abas de tabcontrol usando como parâmetro o texto do node, até usei o evento NodeMouseClick, funcionou com o 1º nível e os outros níveis, mas não funciona com o 2º nível, não sei porque!, e única solução que achei foi esta, que voçê m respondeu.

    Eis o código para popular a treeview.
    public void CarregaTreeView()
            {
    
                int indexSafra = 0;
                int indexFaz = 0;
                int indexTalhao = 0;
                int indexMovimentos = 0;
                int indexInsumos = 0;
                int indexHrMaquina = 0;
    
                dbTview.BeginUpdate();
                dbTview.Nodes.Clear();
    
                StringBuilder Sql = new StringBuilder();
    
                Sql.Append("SELECT S.SAFRA_SAFRA, F.ID_FUNDO_AGRIC_FAZ, F.DESC_FUNDO_AGRIC_FZ, T.ID_TALHAO_TALHAO,");
                Sql.Append(" MT.COD_ATIVIDADE_CTALHAO, MT.DESC_ATIVIDADE_CT, MT.DATA_LANCAMENTO_CTALHAO, I.DESC_PRODUTO_INS,");
                Sql.Append(" I.DOSAGEM_APLICADA_INS, M.ID_MAQUINA, M.DESC_MAQUINA_MQ");
                Sql.Append(" FROM TB_PRINC_CUSTO_SAFRA S");
                Sql.Append(" LEFT JOIN TB_PRINC_CUSTO_FAZENDAS F");
                Sql.Append(" ON S.SAFRA_SAFRA=F.SAFRA_FAZ");
                Sql.Append(" LEFT JOIN TB_PRINC_CUSTO_FAZ_TALHOES T");
                Sql.Append(" ON F.SAFRA_FAZ=T.SAFRA_TALHOES");
                Sql.Append(" AND F.ID_FUNDO_AGRIC_FAZ=T.ID_FUNDO_AGRIC_TALHOES");
                Sql.Append(" LEFT JOIN TB_PRINC_CUSTO_TALHAO MT");
                Sql.Append(" ON T.SAFRA_TALHOES=MT.SAFRA_CTALHAO");
                Sql.Append(" AND T.ID_FUNDO_AGRIC_TALHOES=MT.ID_FUNDO_AGRIC_CTALHAO");
                Sql.Append(" AND T.ID_TALHAO_TALHAO=MT.ID_TALHAO_CTALHAO");
                Sql.Append(" LEFT JOIN TB_CUSTO_TALHAO_UNSUMOS I");
                Sql.Append(" ON MT.SAFRA_CTALHAO=I.SAFRA_INS");
                Sql.Append(" AND MT.ID_FUNDO_AGRIC_CTALHAO=I.ID_FUNDO_AGRIC_INS");
                Sql.Append(" AND MT.ID_TALHAO_CTALHAO=I.ID_TALHAO_INS");
                Sql.Append(" AND MT.DATA_LANCAMENTO_CTALHAO=I.DATA_LANCAMENTO_INS");
                Sql.Append(" AND MT.COD_ATIVIDADE_CTALHAO=I.COD_ATIVIDADE_INS");
                Sql.Append(" LEFT JOIN TB_CUSTO_TALHAO_MAQUINAS M");
                Sql.Append(" ON MT.SAFRA_CTALHAO=M.SAFRA_MAQ");
                Sql.Append(" AND MT.ID_FUNDO_AGRIC_CTALHAO=M.ID_FUNDO_AGRIC_MAQ");
                Sql.Append(" AND MT.ID_TALHAO_CTALHAO=M.ID_TALHAO_MAQ");
                Sql.Append(" AND MT.DATA_LANCAMENTO_CTALHAO=M.DATA_LANCAMENTO_MAQ");
                Sql.Append(" AND MT.COD_ATIVIDADE_CTALHAO=M.COD_ATIVIDADE_MAQ");
                /*Sql.Append(" LEFT JOIN TB_CUSTO_TALHAO_MAO_DE_OBRA O");
                Sql.Append(" ON MT.SAFRA_CTALHAO=O.SAFRA_MOB");
                Sql.Append(" AND MT.ID_FUNDO_AGRIC_CTALHAO=O.ID_FUNDO_AGRIC_MOB");
                Sql.Append(" AND MT.ID_TALHAO_CTALHAO=O.ID_TALHAO_MOB");
                Sql.Append(" AND MT.DATA_LANCAMENTO_CTALHAO=O.DATA_LANCAMENTO_MOB");
                Sql.Append(" AND MT.COD_ATIVIDADE_CTALHAO=O.COD_ATIVIDADE_MOB");
               */
    
                FbCommand cmdCusteio = new FbCommand(Sql.ToString(), ConnFb);
                FbDataReader drCusteio;
                drCusteio = cmdCusteio.ExecuteReader();
    
    
                TreeNode noSafra;
                TreeNode noGrpFaz;
                TreeNode noFazendas;
                TreeNode noGrpTalhoes;
                TreeNode noTalhoes;
                TreeNode noGrpMov;
                TreeNode noMovimentos;
                TreeNode noGrpInsumos;
                TreeNode noInsumos;
                TreeNode noHrMaquinas;
                TreeNode noGrpMaq;
    
    
                string sgnSafra = string.Empty;
                string sgnFazendas = string.Empty;
                string sgnTalhoes = string.Empty;
                string sgnMovimentos = string.Empty;
                string sgnInsumos = string.Empty;
                string sgnServico = string.Empty;
                string sgnNomesProdutos = string.Empty;
                string sgnHrMaquina = string.Empty;
    
    
    
                while (drCusteio.Read())
                {
                    if (!((string)drCusteio["SAFRA_SAFRA"].ToString() == sgnSafra))
                    {
                        noSafra = new TreeNode();
    
                        noSafra.ImageIndex = 0;
                        noSafra.Tag = "Safra";
                        noSafra.Text = drCusteio["SAFRA_SAFRA"].ToString();
    
                        dbTview.Nodes.Add(noSafra);
                        indexSafra = noSafra.Index;
                        sgnSafra = drCusteio["SAFRA_SAFRA"].ToString();
    
                        noGrpFaz = new TreeNode();
                        noGrpFaz.Tag = string.Empty;
                        noGrpFaz.BackColor = Color.Bisque;
                        noGrpFaz.ForeColor = Color.Brown;
    
                        noGrpFaz.Text = "FAZENDAS";
                        dbTview.Nodes[indexSafra].Nodes.Add(noGrpFaz);
    
                    }
    
                    if (!((string)drCusteio["ID_FUNDO_AGRIC_FAZ"].ToString() == sgnFazendas))
                    {
                        noFazendas = new TreeNode();
                        noFazendas.ImageIndex = 1;
                        noFazendas.Tag = "Fazendas";
                        noFazendas.Text = Convert.ToInt32(drCusteio["ID_FUNDO_AGRIC_FAZ"]).ToString("00") + "-" + drCusteio["DESC_FUNDO_AGRIC_FZ"].ToString();
    
                        dbTview.Nodes[indexSafra].Nodes.Add(noFazendas);
                        indexFaz = noFazendas.Index;
                        sgnFazendas = drCusteio["ID_FUNDO_AGRIC_FAZ"].ToString();
    
                        noGrpTalhoes = new TreeNode();
                        noGrpTalhoes.Tag = string.Empty;
                        noGrpTalhoes.BackColor = Color.AliceBlue;
                        noGrpTalhoes.ForeColor = Color.Blue;
    
                        noGrpTalhoes.Text = "TALHÕES";
                        dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes.Add(noGrpTalhoes);
                    }
    
                    if (!((string)drCusteio["ID_TALHAO_TALHAO"].ToString() == sgnTalhoes))
                    {
                        noTalhoes = new TreeNode();
                        noTalhoes.ImageIndex = 1;
                        noTalhoes.Tag = "Talhoes";
                        noTalhoes.Text = Convert.ToInt32(drCusteio["ID_TALHAO_TALHAO"]).ToString("00");
                        dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes.Add(noTalhoes);
                        indexTalhao = noTalhoes.Index;
    
                        sgnTalhoes = drCusteio["ID_TALHAO_TALHAO"].ToString();
    
                        noGrpMov = new TreeNode();
                        noGrpMov.Tag = string.Empty;
                        noGrpMov.BackColor = Color.AliceBlue;
                        noGrpMov.ForeColor = Color.Green;
    
                        noGrpMov.Text = "MOVIMENTOS";
                        dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes[indexTalhao].Nodes.Add(noGrpMov);
                    }
    
    
                    if (drCusteio["COD_ATIVIDADE_CTALHAO"] != null)
                    {
    
                        if (!((string)drCusteio["DESC_ATIVIDADE_CT"].ToString() == sgnMovimentos))
                        {
    
                            noMovimentos = new TreeNode();
                            noMovimentos.ImageIndex = 1;
                            noMovimentos.Tag = "Movimentos";
                            noMovimentos.Text = string.Format("{0:dd/MM/yyy}", drCusteio["DATA_LANCAMENTO_CTALHAO"]).ToString() + "-" +
                                                string.Format("{0:00}", drCusteio["COD_ATIVIDADE_CTALHAO"]) + "-" + drCusteio["DESC_ATIVIDADE_CT"].ToString();
    
                            dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes[indexTalhao].Nodes.Add(noMovimentos);
                            indexMovimentos = noMovimentos.Index;
                            sgnMovimentos = drCusteio["DESC_ATIVIDADE_CT"].ToString();
    
    
                            noGrpInsumos = new TreeNode();
                            noGrpInsumos.Tag = string.Empty;
                            noGrpInsumos.BackColor = Color.AliceBlue;
                            noGrpInsumos.ForeColor = Color.Tomato;
    
                            noGrpInsumos.Text = "INSUMOS";
                            dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes[indexTalhao].Nodes[indexMovimentos].Nodes.Add(noGrpInsumos);
                        }
                    }
                    if (!((string)drCusteio["DESC_PRODUTO_INS"].ToString() == sgnInsumos))
                    {
                        noInsumos = new TreeNode();
                        noInsumos.ImageIndex = 1;
                        noInsumos.Tag = "Insumos";
                        noInsumos.Text = drCusteio["DESC_PRODUTO_INS"].ToString();
                        dbTview.Nodes[indexSafra].Nodes[indexFaz].Nodes[indexTalhao].Nodes[indexMovimentos].Nodes.Add(noInsumos);
                        indexInsumos = noInsumos.Index;
                        sgnInsumos = drCusteio["DESC_PRODUTO_INS"].ToString();
    
    }
    
    Eis o meu código para habilitar pages do tabControl
    private void dbTview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
            {
               
    /*            string PathNode = e.Node.FullPath;
                string[] WordPath = PathNode.Split(new char[] { '\\' });
    
                int WordPathLength = WordPath.Length;
                this.Text = string.Join(" ", WordPath);
                if (e.Node.Tag.ToString() != string.Empty)
                {
                    MessageBox.Show(e.Node.Tag.ToString()); 
                    switch (e.Node.Tag.ToString())
                    {
                       
                        case "Safra":
                            PathSafra = e.Node.Text;
                            MostraBarraBtns();
                            lblTitulo.Text = "Movimento de Abertura";
                            tcCusto.SelectedIndex = 0;
                            clsImportaMov.Safra = Safra_;
                            
                            break;
                        case "Fazendas":
                            PathFaz = e.Node.Text.Split('-')[0]; //WordPath[1].Substring(0, 2);                        
                            EscondeBarraBtns();
                            lblTitulo.Text = "Movimento das Fazendas";
                            tcCusto.SelectedIndex = 1;
                            btnCancela.Enabled = false;
                            btnAlterar.Enabled = true;
                            btnSalva.Enabled = false;                       
                            bdsFaz.Filter = "SAFRA_FAZ=" + "'" + PathSafra + "'" + " and ID_FUNDO_AGRIC_FAZ=" + "'" + PathFaz + "'";                       
                            Validacoes.ValidaRdButton(rbSim, rbNao);
                            
                            break;
                        case "Talhoes":
                            PathTalhoes = e.Node.Text;
                            EscondeBarraBtns();
                            lblTitulo.Text = "Movimento dos Talhões";
                            tcCusto.SelectedIndex = 2;
                            btnCancelTalhao.Enabled = false;
                            btnEditarTalhao.Enabled = true;
                            btnSalvarTalhao.Enabled = false;
                            bdsTalhoes.Filter = "SAFRA_TALHOES=" + "'" + PathSafra + "'" +
                                                " and ID_FUNDO_AGRIC_TALHOES=" + "'" + PathFaz + "'" +
                                                " and ID_TALHAO_TALHAO=" + "'" + PathTalhoes + "'";
                            Validacoes.ValidaRdButton(rbSimTalhao, rbNaoTalhao);
                            
                            break;
                        case "Movimentos":
                            PathMovData = e.Node.Text.Split('-')[0];
                            PathMovAtiv = e.Node.Text.Split('-')[1];
                            btnNovoMov.Enabled = true;
                            btnSalvarMov.Enabled = false;
                            btnAlterarMov.Enabled = true;
                            btnCancelMov.Enabled = false;
                            btnExcluirMov.Enabled = false;
                            EscondeBarraBtns();
                            lblTitulo.Text = "Movimento de Mão de Obra";
                            tcCusto.SelectedIndex = 3;
                            bdsMov.Filter = "SAFRA_CTALHAO=" + "'" + PathSafra + "'" +
                                            " and ID_FUNDO_AGRIC_CTALHAO=" + "'" + PathFaz + "'" +
                                            " and ID_TALHAO_CTALHAO=" + "'" + PathTalhoes + "'" +
                                            " and DATA_LANCAMENTO_CTALHAO=" + "'" + PathMovData + "'" +
                                            " and COD_ATIVIDADE_CTALHAO=" + "'" + PathMovAtiv + "'";
    
                            break;
                        case "Insumos":
                            PathInsumos = e.Node.Text;
                            bdsInsumos.Filter = "SAFRA_INS=" + "'" + PathSafra + "'" +
                                  " and ID_FUNDO_AGRIC_INS=" + "'" + PathFaz + "'" +
                                  " and ID_TALHAO_INS=" + "'" + PathTalhoes + "'" +
                                  " and DATA_LANCAMENTO_INS=" + "'" + PathMovData + "'" +
                                  " and COD_ATIVIDADE_INS=" + "'" + PathMovAtiv + "'" +
                                  " and DESC_PRODUTO_INS=" + "'" + PathInsumos + "'";
    
                            EscondeBarraBtns();
                            lblTitulo.Text = "Lançamentos de Insumos";
                            tcCusto.SelectedIndex = 4;
                            break;
                        case "Maquinas":
                            PathHrMaq = e.Node.Text;
                            bdsMaquinas.Filter = "SAFRA_MAQ=" + "'" + PathSafra + "'" +
                                  " and ID_FUNDO_AGRIC_MAQ=" + "'" + PathFaz + "'" +
                                  " and ID_TALHAO_MAQ=" + "'" + PathTalhoes + "'" +
                                  " and DATA_LANCAMENTO_MAQ=" + "'" + PathMovData + "'" +
                                  " and COD_ATIVIDADE_MAQ=" + "'" + PathMovAtiv + "'" +
                                  " and ID_MAQUINA=" + "'" + PathHrMaq + "'";
                            EscondeBarraBtns();
                            lblTitulo.Text = "Serviços de Máquinas";
                            tcCusto.SelectedIndex = 5;
                            break;
    
                        //PAREI AQUI , FSLTS CHAMAT TBCONTROL MAQUINMAS
                        /* case "Maquinas":
                             Path = e.Node.Text;
                             bdsMaoObra.Filter = "SAFRA_INS=" + "'" + PathSafra + "'" +
                                   " and ID_FUNDO_AGRIC_INS=" + "'" + PathFaz + "'" +
                                   " and ID_TALHAO_INS=" + "'" + PathTalhoes + "'" +
                                   " and DATA_LANCAMENTO_INS=" + "'" + PathMovData + "'" +
                                   " and DESC_ATIVIDADE_INS=" + "'" + PathMovAtiv + "'" +
                                   " and DESC_PRODUTO_INS=" + "'" + PathInsumos + "'";  
                             EscondeBarraBtns();
                             lblTitulo.Text = "Serviços de Máquinas";
                             tcCusto.SelectedIndex = 6;
                             break
                    }
                }*/
    
            }
    

    JOAB