public void AddBreadCrumb(string designacao, long idNivel, long idNivelUpper, int imageIndex) { // adicionar o bread crumb ao arraylist BreadCrumbsPath.BreadCrumb bc = new BreadCrumbsPath.BreadCrumb(designacao, idNivel, idNivelUpper); mPath.Add(bc); CreateBreadCrumbControl(designacao, imageIndex, bc); }
private void CreateBreadCrumbControl(string designacao, int imageIndex, BreadCrumbsPath.BreadCrumb bc) { // componente gráfico correspondente ao novo elemento do caminho LinkLabel lLbl; lLbl = new LinkLabel(); lLbl.Text = designacao; lLbl.Tag = bc; lLbl.AutoSize = true; lLbl.Top = mPaddingTop; lLbl.Click += new EventHandler(this.lLbl_Click); // icone que ilustra o tipo de elemento a adicionar ao caminho Label iconLbl; iconLbl = new Label(); iconLbl.Top = 2; iconLbl.ImageList = mImgList; iconLbl.ImageIndex = imageIndex; iconLbl.Width = 20; Label lbl; lbl = new Label(); lbl.Text = ">"; lbl.Top = mPaddingTop; lbl.AutoSize = true; // testar se o novo elemento do caminho não ultrapassa o espaço disponivel if (mLastPosition == 0) { // o controlo gráfico ainda não contem nenhum elemento iconLbl.Left = mLastPosition + mSpacing; breadCrumbsPanel.Controls.Add(iconLbl); mLastPosition += mSpacing + iconLbl.Width; lLbl.Left = mLastPosition; } else if ((breadCrumbsPanel.Width - mLastPosition) > (mSpacing + lbl.Width + mSpacing + lLbl.Width + mSpacing)) { //existe espaço para adicionar o novo elemento ao controlo gráfico lbl.Left = mLastPosition; breadCrumbsPanel.Controls.Add(lbl); mLastPosition += mSpacing + lbl.Width; iconLbl.Left = mLastPosition; breadCrumbsPanel.Controls.Add(iconLbl); mLastPosition += iconLbl.Width; lLbl.Left = mLastPosition; } else { // não existe espaço para adicionar o novo elemento do caminho no controlo gráfico // pelo que é necessário reorganizar o seu conteúdo (é garantido que o último elemento // inserido no controlo fica visível) int acerto = ((mSpacing + lbl.Width + mSpacing + iconLbl.Width + lLbl.Width) - (breadCrumbsPanel.Width - mLastPosition)); breadCrumbsPanel.Width += acerto; breadCrumbsPanel.Left = panel2.Width - breadCrumbsPanel.Width; begin.Enabled = true; begin.Visible = true; end.Visible = true; lbl.Left = mLastPosition; breadCrumbsPanel.Controls.Add(lbl); mLastPosition += mSpacing + lbl.Width; iconLbl.Left = mLastPosition; breadCrumbsPanel.Controls.Add(iconLbl); mLastPosition += iconLbl.Width; lLbl.Left = mLastPosition; } breadCrumbsPanel.Controls.Add(lLbl); mLastPosition += mSpacing + lLbl.Width + mSpacing; if (mPath.Count > 1) { upLevel.Enabled = true; } }