Nieprawidłowe rysowanie tabeli w zakładkach

0

Witam,

Mam problem, zwiazane z wyswietlaniem dabeli podczas klikania w inna zakladke.
Moj program posiada dynamiczne tworzenie zakladek. W chwili klikniecia w nowa zakladke utworzony zostaje obiekt, i na zakladke rysowana jest tabelka zgodnie z danymi z obiektu.

I teraz tak. samo tworzenie przebiega bezproblemowo. Natomiast gdy przelaczam sie miedzy zakladkami, to rysowany jest obiekt z zakladki na ktora kliknelam uprzednio.

Stworzylam dodatkowe etykiety aby sprawdzic czy to nie jest problem z blednym pobraniem danych o obiekcie, ale nie, te dane wyswietlane sa prawidlowo.

Pomozcie prosze.

        private void NvelleTab()
                {
                string title = "TabPage " + (id_tab+1).ToString();
                id_tab++;
                TabPage myTabPage = new TabPage(title);                
                this.tabControl1.TabPages.Add(myTabPage);
                this.tabControl1.SelectedTab = myTabPage;
                this.tabControl1.SelectedTab.Name = id_tab.ToString();
                this.tabControl1.SelectedTab.Paint += new System.Windows.Forms.PaintEventHandler(this.tabPage1_Paint);
                
        }
        private void nowyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            // wyswietlenie Form2
            NvlleChoix = new DateChoix(this);
     
            if (NvlleChoix.ShowDialog() == DialogResult.OK)
             {                 
                this.Legende.Visible = true;
                NvelleTab ();
                id_stab = int.Parse(this.tabControl1.SelectedTab.Name); 
                
                Callandier call = new Callandier(Callandier.pub_mois, Callandier.pub_an, id_tab);
             
                this.obj_list.Add(call);
                           
                label2.Text = id_tab.ToString();
                label3.Text = "Name" +this.tabControl1.SelectedTab.Name;
                label4.Text = obj_list[id_tab-1].af_an().ToString();
                label5.Text = obj_list[id_tab-1].combien_jour().ToString();
          
            };
        }
       
                                                
                                              
        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }


        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {

        }

        // Usuwanie zakładek
        private void EffacerTab()
        {
            TabPage choix_page = tabControl1.SelectedTab;
            this.tabControl1.TabPages.Remove(choix_page);

        }
        //Usuwanie zakladek
        private void zamknijZakladkeToolStripMenuItem_Click(object sender, EventArgs e)
        {

            this.EffacerTab();
            //wyswietlenie danych zakladki wybranej
            id_stab = int.Parse(this.tabControl1.SelectedTab.Name);
            label4.Text = obj_list[id_stab - 1].af_an().ToString();
        }



        private void tabControl1_Click(object sender, EventArgs e)
        {
            id_stab = int.Parse(this.tabControl1.SelectedTab.Name);
            this.tabControl1.SelectedTab.Paint += new System.Windows.Forms.PaintEventHandler(this.tabPage1_Paint);
            label3.Text = "Name" + this.tabControl1.SelectedTab.Name;
            label4.Text = obj_list[id_stab-1].af_an().ToString();
            label5.Text = obj_list[id_stab-1].combien_jour().ToString();
            
        }
      private void tabPage1_Paint(object sender, PaintEventArgs e)
        {
            
           graph = tabControl1.SelectedTab.CreateGraphics();
                 
           this.obj_list[id_stab-1].rysuj(graph);
                             
        }   
  public void rysuj (Graphics g)
            {
                int x1 = 0;
                int y1 = 40;
                int szer = 10;
                int wys = 20;

                Pen p = new Pen(Color.Black, 1);
                
                for (int j = 1; j <= 5; j++ )
                {
                    x1 = 0;
                    for (int i = 0; i <= this.combien_jour(); i++)
                    {
                        g.DrawRectangle(p, x1, y1, szer, wys);
                        x1 += szer;
                    }
                    y1 += wys;

                 }   
            }
 
0

Zakładasz, że tutaj:

        private void tabControl1_Click(object sender, EventArgs e)
        {
            id_stab = int.Parse(this.tabControl1.SelectedTab.Name);

SelectedTab jest już ustawiony na nowy. Upewnij się, że tak jest, bo mi się wydaje, że tutaj może być problem. Jeżeli jednak jest, to spróbuj wymusić odświeżenie zawartości przez Invalidate() na końcu tej metody.

0

Hej,

Selected tab jest odsiwezony, bo mam z boku dodana etykiete ktora mi je wyswietla.
Generalnie probowalam razem z odswieżeniem, ale uzylam funkcji Refresh. Rozwiazuje to w pewien sposob moj problem, ale korzystajac z programu, ja widze, że najpierw wyswietlana jest "stara' tabelka a potem ta moja, to przejscie jest widoczne niestety.

1 użytkowników online, w tym zalogowanych: 0, gości: 1