Prezentarea se încărcă. Vă rugăm să așteptați

Prezentarea se încărcă. Vă rugăm să așteptați

Tehnici de machetare ecran (tpz; atribMarci;)

Prezentări similare


Prezentarea pe tema: "Tehnici de machetare ecran (tpz; atribMarci;)"— Transcriere de prezentare:

1 Tehnici de machetare ecran (tpz; atribMarci;)
Instanţiere dinamică de controale Masive de controale Derivare din controale; validare Completare date prin suprapunere de controale Ghidare utilizator prin sincronizarea controalelor Serializare / deserializare obiecte; shallow/deep copy

2 Instanţiere dinamică de controale
Designer => static; dinamic => program ex: schimbare opţiuni/proprietati, legare-dezlegare funcţii public TextBox txtBoxDinamic; // declaratie in clasa // in constructor sau undeva in zona cod executabil txtBoxDinamic = new TextBox(); txtBoxDinamic.Location = new Point(100, 100); this.Controls.Add(txtBoxDinamic);

3 Masive de controale public TextBox[][] m; // in clasa Form1
m = new TextBox[3][]; for (i = 0; i < 3; i++) m[i] = new TextBox[6]; // in cons Form1, dupa InitializeComponents, sa existe t00,... m[0][0] = t00; m[0][1] = t01; m[0][2] = t02; m[0][3] = t03; m[0][4] = t04; m[0][5] = t05; m[1][0] = t10; m[1][1] = t11; m[1][2] = t12; m[1][3] = t13; m[1][4] = t14; m[1][5] = t15; m[2][0] = t20; m[2][1] = t21; m[2][2] = t22; m[2][3] = t23; m[2][4] = t24; m[2][5] = t25;

4 Masive de controale private void btnAddLinie_Click(object sender, System.EventArgs e) { TextBox[] n; n = new TextBox[m[0].Length]; // linie noua,cu atatea referinte cat linie 1 int dist = m[1][0].Location.Y - m[0][0].Location.Y; // dist pe verticala intre primele doua linii for (i = 0; i < m[0].Length; i++) // cate col are linia n[i] = new TextBox(); //instatiere textBox pt fiec col n[i].Location = new Point(m[0][i].Location.X, m[m.Length - 1][i].Location.Y + dist); // aliniere: orizontala=acelasi x ; verticala=Y crescut cu dist n[i].Size = m[0][i].Size; this.Controls.Add(n[i]); // dimensionare ca textBox+ul analog linie 1 + adaugare } n[n.Length - 1].ReadOnly = true; TextBox[][] aux = m; // redimensionare matrice de textBoxuri m = new TextBox[aux.Length + 1][]; // vectorul de linii + inca una noua for (i = 0; i < aux.Length; i++) m[i] = aux[i]; // leg liniile existente m[aux.Length] = n; // adaug si pe cea noua

5 Derivare controale (textBox numeric)
public class TextBoxNumeric: TextBox // dupa cls Form1 !! { protected override void OnKeyPress(KeyPressEventArgs e) if(e.KeyChar >='0' && e.KeyChar <= '9' ) base.OnKeyPress (e); else e.Handled=true; } public TextBoxNumeric txtBoxNum1; // in cls Form1 txtBoxNum1= new TextBoxNumeric(); // in constructor Form1 txtBoxNum1.Location = new Point(100, 200); this.Controls.Add(txtBoxNum1); 

6 Completare date prin suprapunere de controale
Un sigur ComboBox (meniul restaurantului) se afiseaza peste diverse textBox-uri private void tb_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { cine=(TextBox)sender; cb1.Location= cine.Location; cb1.Visible=true; } Funcția de tratare MouseDown se leagă de toate textBox-urile care trebuie sa reacționeze la suprapunere de comboBox. private void cb1_SelectedIndexChanged(object sender, System.EventArgs e) cine.Text = cb1.Text; cb1.Visible = false;

7 Ghidare utilizator prin sincronizarea controalelor
private void marca_SelectionChangeCommitted(object sender, System.EventArgs e) { this.pers.Enabled = true; this.marca.Enabled = false; } private void pers_SelectedIndexChanged(object sender, System.EventArgs e) { ListViewItem itm = new ListViewItem(marca.Text); itm.SubItems.Add(pers.Text); lv.Items.Add(itm); // pers.Items.Remove(pers.SelectedItem); this.pers.Enabled = false; this.marca.Enabled = true; }

8 Serializare / deserializare obiecte
Atributul [Serializable] private void btnSave_Click(object sender, System.EventArgs e) { ArrayList list = new ArrayList(); for (int i = 0; i < m.Length; i++) LinFact lin = new LinFact(m[i][1].Text, m[i][2].Text, m[i][3].Text, m[i][4].Text); list.Add(lin); } FileStream s = new FileStream("NotePlata.dat", FileMode.Create); BinaryFormatter f = new BinaryFormatter(); f.Serialize(s, list); s.Close();

9 Serializare / deserializare obiecte
private void btnRestore_Click(object sender, System.EventArgs e) { FileStream s; s = new FileStream("NotePlata.dat", FileMode.Open); BinaryFormatter f = new BinaryFormatter(); ArrayList lista = (ArrayList)f.Deserialize(s); s.Close(); foreach (LinFact lin in lista) // procesare ArrayList } - ce obiecte stochează(deschid fisier cu Notepad); ArrayList doar le înlănţuie - ce format (intern) ? De ce nu initializez lista = new ArrayList() ?

10 Clonarea obiectelor public class Pers { public int Varsta;
public string Nume; public Vehicul Auto; public Pers(int v, string n) { Varsta = v; Nume = n; } // ….. public Pers ShallowCopy() return (Pers)this.MemberwiseClone(); }

11 Clonarea obiectelor public class Pers { public int Varsta;
public string Nume; public Vehicul Auto; public Pers(int v, string n) { Varsta = v; Nume = n; } // ….. public Pers DeepCopyCons() Pers other = (Pers)this.MemberwiseClone(); other.Auto = new Vehicul(this.Auto.IdNumber); return other; }

12 Clonarea obiectelor [Serializable] public class Pers {
public int Varsta; public string Nume; public Vehicul Auto; public Pers(int v, string n) { Varsta = v; Nume = n; } // ….. public Pers DeepCopySerializ() MemoryStream m = new MemoryStream(); BinaryFormatter b = new BinaryFormatter(); b.Serialize(m, this); // serializeaza this, adica obiect Pers m.Position = 0; return (Pers)b.Deserialize(m); // deserializeaza, instantiind si vehicolul // recursiv: Pers refera Auto, Auto refera Fabrica etc. }


Descărcați ppt "Tehnici de machetare ecran (tpz; atribMarci;)"

Prezentări similare


Publicitate de la Google