Se afișează postările cu eticheta analiză. Afișați toate postările
Se afișează postările cu eticheta analiză. Afișați toate postările

[C# WinForms] Gruparea Controalelor folosind proprietatea Tag și numere float

Pentru a calcula partea fractionara a unui numar de tip float in C#, se poate folosi, de exemplu, expresia:

x - (int)x

unde
- x este numele unei variabile de tip float;
- - este minus, operator matematic;
- (int) înseamnă că (int)x este partea întreagă a lui x;

De exemplu:

x - (int)x == 0.5F

unde

== este operatorul de verificare a egalității dintre 2 expresii;
0.5F este o expresie literală de tip float (F vine de la float) și „.” este separatorul dintre partea întreagă și cea fracțională a numărului (în lb. română acesta este , dar în C# se folosește .).


Exemplul #1

Cod sursă

float x = 1.5F;
float y = x - (int)x;
MessageBox.Show($"Partea fractionara a" +

    $" lui {x} este {y}.");

Captură de ecran


La rularea programului:

Exemplul #2

În urm. exemplu avem un container de Controale (UserControl, Form, Panel etc.) care conține mai multe Controale. Fiecare Control are o proprietate numită Tag care poate conține orice tip de obiect (string, float, tipuri valoare - struct, tipuri referință - class). În acest ex. atribuim proprietății Tag a tuturor Controalelor dintr-un container câte un nr. float, apoi traversăm colecția de controale Controls (sau this.Controls) și la fiecare verificăm valoarea Tag-ului: dacă partea fracționară este 0F sau 0.5F, astfel Controalele se pot grupa în mod eficient.

De exemplu:

            float tag = 1.5F; // Tag-ul transcris în tip float din designer WinForms sau din locul unde se construiește interfața grafică pentru utilizator, programatic.
            Control c = Controls[(int)tag]; // Controlul cu indicele ca partea întreagă a „tag”, variabilă care poate avea partea fracționară 0F sau 0.5F în acest exemplu, este gasit sau apare o excepție. (Controls nu se acceseaza decat prin indici numere naturale.)
            float x = tag - (int)tag; // partea fractionara a tag-ului
            if (x == 0.5F)
            {
                // ....
            }
            else if (x == 0F)
            {
                // ...
            }

Partea fractionara poate fi si 0.2F, 0.4F etc... Care valori sunt folosite depinde de caz.

Cod sursă complet (explicație dedesubt)

using System;
using System.Drawing;
using System.Windows.Forms;

namespace cs_winforms_tag_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i += 2)
            {
                Controls.Add(new TextBox()
                {
                    Tag = (float)i,
                    Left = 10,
                    Top = 10 + i * 20,
                    Text = "Din primul set"
                });
                Controls.Add(new TextBox()
                {
                    Tag = (float)i + 0.5F,
                    Left = 10,
                    Top = 10 + (i + 1) * 20,
                    Text = "Din al doilea set"
                });
            }

            Button btn = new Button()
            {
                Text = "Colorează",
                AutoSize = true,
                Left = 150,
                Top = 10
            };
            btn.Click += Btn_Click;
            Controls.Add(btn);
        }

        private void Btn_Click(object sender, EventArgs e)
        {
            foreach (Control c in Controls)
            {
                if (c.Tag == null)
                {
                    continue;
                }

                float tag = (float)(c.Tag);
                float pFractionara = tag - (int)tag;
                if (pFractionara == 0.5F)
                {
                    c.ForeColor = Color.Blue;
                }
                else
                {
                    c.ForeColor = Color.Green;
                }
            }
        }
    }
}

Explicație

Form1_Load este handler conectat la eventul Form1.Load, Form1 fiind singurul Form din proiect. In acest handler, i trece de la 0 la 4 in pasi de lungime 2, la fiecare pas creand 2 TextBox-uri cu valoarea Tag ca un numar float cu partea fractionara fie 0, fie 0.5. Se seteaza coordonatele vizuale ale TextBox-urilor, Left si Top. Fiecare TextBox are ca Text fie "Din primul set", fie "Din al doilea set". Se creeaza in acest handler si un buton pe care cand se face clic se coloreaza textul din TextBox-uri in functie de valoarea proprietatii lor Tag.

Capturi de ecran





La rularea programului:


După clic pe butonul Colorează:

Undo și Redo, pentru programatori

Ce are loc când utilizatorul programului tău execută comanda Undo:


Ce are loc când utilizatorul programului tău execută comanda Redo:


Când se adaugă un element în stiva Undo prin acțiunea utilizatorului au loc următorii pași:


P.S. La fiecare modificare a conținutul vreunei stive se actualizează starea de activat sau dezactivat a butoanelor Undo și Redo din interfața grafică.

Analiza aplicației de vreme Weather pe laptop Windows 10 (25.09.2016)





În acest videoclip fac o prezentare a aplicației de vreme Weather din Windows 10, așa cum arată ea azi, în 25.09.2016. Acest program face parte din categoria aplicațiilor universale, făcute pentru Windows 10, aplicații care funcționează și pe calculatoare desktop, și pe tablete, dar și pe telefoane mobile. Aplicația Weather îți permite să navighezi în informațiile despre vremea din acest moment sau din această săptămână, mai precis 10 zile începând cu ziua de azi, pentru locul tău curent, să vezi temperaturile medii și de record pentru locul tău și în jurul lumii. Nu sunt sigur dar cred că poți folosi și funcția asistentului digital Cortana din Windows 10 pentru a afla informații despre vremea din săptămână sau dintr-un anumit moment al zilei cu această aplicație, dar, după cum vedeți [ARĂT] , eu am Cortana dezactivat. Pentru a funcționa, aplicația Weather are nevoie de o conexiune la Internet.