none
Přidávání prvků na otevřený formulář z jiné třídy

    Obecná diskuse

  • Potřeboval bych poradit s přidáváním objektu(textbox, label atd.) na otevřený formulář(Form1) z jiné třídy, která nám zpracovává data z databáze za pomoci LINQ.

    Když přidáváme objekt po stisknutí tlačítka na aktivním formuláři Form1, tak se prvek přidá, a vše pracuje, jak má, ale pokud se přidává objekt i stejným kódem, ale volaný z třídy "zaznam", tak se tento objekt na otevřeném formuláři nezobrazuje. Pokud si ale vytvořím novou instanci formuláře příkazem ( Form1 novyfrm = new Form1(); ) a použiji novyfrm.Show(); , tak se tento formulář zobrazí jako nový, a přidávaný objekt, se tam objeví. Nedaří se provést něco, jako přidání objektu na původní formulář, a jen jakoby znovu zobrazení původních a i nově vytvořených objektů. 

    Používám VisualStudio 2015, pokud je ve verzích nějaký rozdíl. 

    Pro kontrolu, zda někde nedělám nějakou zásadní chybu přikládám část funkčního kódu s popisem.


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace IS2
    {
        public partial class Form1 : Form
        {
            Rozvrh rzv = new Rozvrh(); //vyrobime si novy rozvrh
            private TextBox[] txtPole = new TextBox[50];
            int A = 1; //deklarace promenne pro posun prvku
            
            public Form1()
            {
                InitializeComponent();
                //vse toto je nastaveno v properties, zde je to hlavne, pro zabrazeni co se ma menit
                this.Width = 1880; //sirka formulare
                this.Height = 1000; //vyska formulare
                this.StartPosition = FormStartPosition.CenterScreen; //startovaci pozice formulare           
            }
     
            private void btn_zobraz_Click(object sender, EventArgs e)
            {
                //AddNewTextBox();   //po odkomentovani se textbox prida dobre
                rzv.smazat_data();
                rzv.vytvorit(datumVyberu.SelectionStart); //posleme vybrany datum
                rzv.vykreslit(tlp_cas); //vykreslime si zakazky
                //AddNewTextBox();    //po odkomentovani se textbox prida dobre
            }
     
            public void vykreslit_txt_2(int y, int x, int delka, int id_zakazky, int cisloPole)
            {  
                System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox();   
                this.Controls.Add(txt);
                txt.Top = A * 28; //od horniho okraje dolu
                txt.Left = 120; //od leveho okraje
                txt.Text = "TextBox" + this.A.ToString(); //zapise do policka text
                A++;
     
                //AddNewTextBox();    //po odkomentovani se textbox NEPRIDA jelikoz neni volany po stisku tlacitka
            }
     
     
            public System.Windows.Forms.TextBox AddNewTextBox()
            {
                //kod co zobrazuje novy txtbox na formulari
                System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox();
                
                this.Controls.Add(txt);
                txt.Top = A * 28; //od horniho okraje dolu
                txt.Left = 15; //od leveho okraje
                txt.Text = "TextBox" + this.A.ToString(); //zapise do policka text
                A++;
                return txt;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                AddNewTextBox();  //po kliknuti na tlacitko na formulari, se novy txtbox zobrazuje spravne
            }
        }
     
    }

                                                                                                 

     

    15. září 2016 0:03