DOMANDA C# passare form a una classe

Pubblicità

OttoOtti

Nuovo Utente
Messaggi
83
Reazioni
7
Punteggio
26
Salve ragazzi vorrei passare a una classe un form ma non so come fare ? ho provato cosi ma non funziona ? samete quale il metodo giusto per cambiare elementi di un form tramite una classe ?
Classe : graphics
C#:
public void trasparenza <TWindow>() where TWindow : MainWindow, new()
        {
            var form = new TWindow();

            form.menu.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(216, 0, 0, 0));
            form.barra_cav.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(216, 0, 0, 0));
            //barra_1 = new SolidColorBrush(System.Windows.Media.Color.FromArgb(216, 0, 0, 0));
        }
Form:MainWindow
C#:
graphics Gra_Main = new graphics();

public MainWindow()
        {
            InitializeComponent();
            Gra_Main.trasparenza<MainWindow>();
        }
 
La passi esattamente come qualsiasi altro parametro, definiscilo come Form e sei a posto.

Ma perche' devi creare una classe per cambiare i parametri della tua Form?
 
Se il menu e' nel stesso Form, perche' hai bisogno di una classe?

Non sto criticando, solo cercare di capire.
In genere le classi sono entita' "autonome" che non dovrebbero mai toccare proprieta' dei componenti GUI usate nella stessa applicazione. Una classe serve per mantenere lo "stato" di una applicazione, e il Form cambia il suo aspetto a seconda del valore delle proprieta' di tale classe.
Credimi, modificare il GUI all'interno di una classe e' una ricetta per scrivere "spaghetti code".
 
XD la sto utilizzando per creare la grafica del vari form per non ripete lo stesso codice utilizzo la classe è sbagliato ?
 
XD la sto utilizzando per creare la grafica del vari form per non ripete lo stesso codice utilizzo la classe è sbagliato ?
Per non ripetere codice si utilizzano funzioni, in questo caso (C#) chiamate metodi di una classe.

Siccome devi apportare modifiche nel Form stesso, perché non utilizzi un metodo interno che modifica i suoi attributi?
 
XD la sto utilizzando per creare la grafica del vari form per non ripete lo stesso codice utilizzo la classe è sbagliato ?
Non e' sbagliato, ma quello e' un discorso diverso da quello che hai richiesto (gestire un menu). Ma il problema rimane, ossia che la classe (comune) debba conoscere le proprieta' interne delle varie Form che hai nel tuo progetto.
A questo punto e' difficile continuare la discussione senza avere piu' informazione di quello che vuoi ottenere, in quanto esistono molti modi per fare cio', dipende dalla situazione.

Comunque, per rispondere alla tua domanda, puoi passare la tua Form esattamente come una Form, vedi questo stupido esempio (il codice non e' provato, e' solo per dare una idea):

C#:
public class Graphics
{
    public Graphics()
    {
    }
    
    public void Change(Form f)
    {
        // do something with f
    }
}

public partial class FormMain : Form
{
    private Graphics g = new Graphics();
    
    private void ActionAndGo()
    {
        g.Change(this);
    }
}
Quello e' il modo piu' semplice e generico. La classe Graphics non sa nulla dei parametri interni della Form, quindi puo' accedere solo alle proprieta' generiche della Form. Puoi anche dichiarare la classe Graphics come static cosi' non hai bisogno di crearla (visto che modifica solo i parametri della From che passi). Potresti ottenere lo stesso usando un "extension method" il che ti eviterebbe di creare una classe apposta. Insomma, come vedi le soluzioni sono molteplici, come in quasi tutti i casi.
Devi prima di tutto definire le tue specifiche del progetto, e partire da quelle. Solo sapendo cosa vuoi ottenere potrai trovare la giusta soluzione.
 
allora praticante sto riscrivendo il codice in modo pulito di un programma che ho già fatto , pero ogni pagina era troppo lunga quindi voglio dividere il codice in blocchi e classi , la domanda e questa come posso ordinare in modo pulito il codice ? vorrei utilizzare le classi per gestire tutte le animazioni e grafica del programma
--- i due messaggi sono stati uniti ---
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using System.IO;

namespace Test
{
    class menu
    {
        // DATE
        public System.Windows.Point window = new System.Windows.Point(SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight);
        public SolidColorBrush system_color = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 255, 0, 0));

        public void border_load(MainWindow form)
        {
            //border_draws(form, system_color, 4);
            menu_main(form, 1);

        }

        public void border_draws(MainWindow form, SolidColorBrush colore, int selected)
        {
            int origHeight = Convert.ToInt32(window.Y);
            int x = origHeight / 5;
            int a1 = x - 95;
            int sel = selected * x - 95;
            int inizio = sel, medio = x, fine = origHeight;

            int max = 80, min = 60 ,a= inizio, b=medio,c= origHeight;

            Polyline Poly = form.menu_poly;
            Poly.Stroke = colore;
            Poly.StrokeThickness = 1.4;
            Poly.FillRule = FillRule.EvenOdd;
            System.Windows.Point Point1 = new System.Windows.Point(max, 0);
            System.Windows.Point Point2 = new System.Windows.Point(max, a);
            System.Windows.Point Point3 = new System.Windows.Point(min, a + 25);
            System.Windows.Point Point4 = new System.Windows.Point(min, a + b + 25);
            System.Windows.Point Point5 = new System.Windows.Point(max, a + b + 50);
            System.Windows.Point Point6 = new System.Windows.Point(max, c);
            PointCollection myPointCollection2 = new PointCollection();
            myPointCollection2.Add(Point1);
            myPointCollection2.Add(Point2);
            myPointCollection2.Add(Point3);
            myPointCollection2.Add(Point4);
            myPointCollection2.Add(Point5);
            myPointCollection2.Add(Point6);
            Poly.Points = myPointCollection2;
            form.menu_poly = Poly;

            form.body_border.BorderBrush = colore;
        }

        public void menu_main(MainWindow form, int selected)
        {
            menu_button_color(form, system_color,"/graphics/demo.png");
            menu_button_template(form);
            menu_button_selected(form, selected);
            border_draws(form, system_color, selected);
        }

        public void menu_button(MainWindow form)
        {

        }

        public void menu_button_template(MainWindow form)
        {
            int height = Screen.PrimaryScreen.Bounds.Height;
            int x = height / 5 - 10;

            // BUTTONE 1
            form.button_1.Margin = new Thickness(0, x, 0, 0);
            form.button_2.Margin = new Thickness(0, x + x, 0, 0);
            form.button_3.Margin = new Thickness(0, x + x + x, 0, 0);
            form.button_4.Margin = new Thickness(0, x + x + x + x, 0, 0);
        }

        public void menu_button_selected(MainWindow form, int selected)
        {
            if (selected == 1)
            {
                form.button_1.Width = 60;
                form.button_2.Width = 80;
                form.button_3.Width = 80;
                form.button_4.Width = 80;
            }

            if (selected == 2)
            {
                form.button_1.Width = 80;
                form.button_2.Width = 60;
                form.button_3.Width = 80;
                form.button_4.Width = 80;
            }

            if (selected == 3)
            {
                form.button_1.Width = 80;
                form.button_2.Width = 80;
                form.button_3.Width = 60;
                form.button_4.Width = 80;
            }

            if (selected == 4)
            {
                form.button_1.Width = 80;
                form.button_2.Width = 80;
                form.button_3.Width = 80;
                form.button_4.Width = 60;
            }

        }

        public void menu_button_color(MainWindow form, SolidColorBrush colore, String image)
        {

            System.Windows.Media.SolidColorBrush color = colore;
            System.Drawing.Color myColor = System.Drawing.Color.FromArgb(color.Color.A,
                                                             color.Color.R,
                                                             color.Color.G,
                                                             color.Color.B);

            Bitmap bmp_original = new Bitmap("C:/Users/Salvatore/Downloads/test.png");

            bmp_original.MakeTransparent();
            bmp_original.MakeTransparent(System.Drawing.Color.Transparent);
            Bitmap bmp_new = new Bitmap(bmp_original);
            bmp_new.MakeTransparent();
            bmp_new.MakeTransparent(System.Drawing.Color.Transparent);

            int height = bmp_original.Height, width = bmp_original.Width;

            for (int y = 0; y< height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    // prende il pixel
                    System.Drawing.Color p = bmp_original.GetPixel(x, y);

                    // estrae il colore ARGB
                    int a = p.A;
                    int r = p.R;
                    int g = p.G;
                    int b = p.B;

                    // setta il colore del pixel
                    if (a != 0)
                        bmp_new.SetPixel(x, y, myColor);
                }

            }

            form.button_1_img.Source = BitmapToImageSource(bmp_new);
            form.button_2_img.Source = BitmapToImageSource(bmp_new);
            form.button_3_img.Source = BitmapToImageSource(bmp_new);
            form.button_4_img.Source = BitmapToImageSource(bmp_new);

        }

        // ALTRI

        BitmapImage BitmapToImageSource(Bitmap bitmap)
        {
            using (MemoryStream memory = new MemoryStream())
            {
                bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
                memory.Position = 0;
                BitmapImage bitmapimage = new BitmapImage();
                bitmapimage.BeginInit();
                bitmapimage.StreamSource = memory;
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
                bitmapimage.EndInit();

                return bitmapimage;
            }
        }

        // END CLASS
    }
}
 
Ultima modifica:
Le classi NON vanno usate per spezzettare il codice. Se il file di quella classe diventa troppo lungo, la cosa da fare e' spezzare il codice in piu' file e dichiarare la classe in tutti i file con il parametro partial.
Quello che stai creando e', come ti avevo avvertito, "spaghetti code", ossia un garbuglio di classi che conoscono troppo i parametri interni delle altre classi (per esempio la tua classe conosce tutti i controlli contenuti nella tua MainWindow, tipo menu e bottoni)
 
capito , come posso fare per spezzettare il codice mi fai un esempio in codice cosi aggiusto il mio errore :D
--- i due messaggi sono stati uniti ---
credo di avere risolto aspetto conferma del fatto che sia il metodo giusto Andre , ho creato un file di nome "graphics.cs" e dentro ho scritto questo codice
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Threading;
using System.Reflection;
using System.IO;

namespace Test
{
    /// <summary>
    /// Logica di interazione per MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // DATE
        public System.Windows.Point window = new System.Windows.Point(SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight);
        public SolidColorBrush system_color = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 255, 0, 0));

        // -----------------------------------------------
        // MAIN
        // -----------------------------------------------

        public void MainWindow_load()
        {
            menu_main(1);

        }

        public void border_draws(SolidColorBrush colore, int selected)
        {
            int origHeight = Convert.ToInt32(window.Y);
            int x = origHeight / 5;
            int a1 = x - 95;
            int sel = selected * x - 95;
            int inizio = sel, medio = x, fine = origHeight;

            int max = 80, min = 60, a = inizio, b = medio, c = origHeight;

            Polyline Poly = menu_poly;
            Poly.Stroke = colore;
            Poly.StrokeThickness = 1.4;
            Poly.FillRule = FillRule.EvenOdd;
            System.Windows.Point Point1 = new System.Windows.Point(max, 0);
            System.Windows.Point Point2 = new System.Windows.Point(max, a);
            System.Windows.Point Point3 = new System.Windows.Point(min, a + 25);
            System.Windows.Point Point4 = new System.Windows.Point(min, a + b + 25);
            System.Windows.Point Point5 = new System.Windows.Point(max, a + b + 50);
            System.Windows.Point Point6 = new System.Windows.Point(max, c);
            PointCollection myPointCollection2 = new PointCollection();
            myPointCollection2.Add(Point1);
            myPointCollection2.Add(Point2);
            myPointCollection2.Add(Point3);
            myPointCollection2.Add(Point4);
            myPointCollection2.Add(Point5);
            myPointCollection2.Add(Point6);
            Poly.Points = myPointCollection2;
            menu_poly = Poly;

            body_border.BorderBrush = colore;
        }

        // -----------------------------------------------
        // MENU
        // -----------------------------------------------

        public void menu_main(int selected)
        {
            menu_button(selected);
            border_draws(system_color, selected);
        }

        public void menu_button(int selected)
        {
            menu_button_color(system_color, "/graphics/demo.png");
            menu_button_template();
            menu_button_selected(selected);
        }

        public void menu_button_template()
        {
            int height = Convert.ToInt32(window.Y);
            int x = height / 5 - 10;

            // BUTTONE 1
            button_1.Margin = new Thickness(0, x, 0, 0);
            button_2.Margin = new Thickness(0, x + x, 0, 0);
            button_3.Margin = new Thickness(0, x + x + x, 0, 0);
            button_4.Margin = new Thickness(0, x + x + x + x, 0, 0);
        }

        public void menu_button_selected(int selected)
        {
            if (selected == 1)
            {
                button_1.Width = 60;
                button_2.Width = 80;
                button_3.Width = 80;
                button_4.Width = 80;
            }

            if (selected == 2)
            {
                button_1.Width = 80;
                button_2.Width = 60;
                button_3.Width = 80;
                button_4.Width = 80;
            }

            if (selected == 3)
            {
                button_1.Width = 80;
                button_2.Width = 80;
                button_3.Width = 60;
                button_4.Width = 80;
            }

            if (selected == 4)
            {
                button_1.Width = 80;
                button_2.Width = 80;
                button_3.Width = 80;
                button_4.Width = 60;
            }

        }

        public void menu_button_color(SolidColorBrush colore, String image)
        {

            System.Windows.Media.SolidColorBrush color = colore;
            System.Drawing.Color myColor = System.Drawing.Color.FromArgb(color.Color.A,
                                                             color.Color.R,
                                                             color.Color.G,
                                                             color.Color.B);

            Bitmap bmp_original = new Bitmap("C:/Users/Salvatore/Downloads/test.png");

            bmp_original.MakeTransparent();
            bmp_original.MakeTransparent(System.Drawing.Color.Transparent);
            Bitmap bmp_new = new Bitmap(bmp_original);
            bmp_new.MakeTransparent();
            bmp_new.MakeTransparent(System.Drawing.Color.Transparent);

            int height = bmp_original.Height, width = bmp_original.Width;

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    // prende il pixel
                    System.Drawing.Color p = bmp_original.GetPixel(x, y);

                    // estrae il colore ARGB
                    int a = p.A;
                    int r = p.R;
                    int g = p.G;
                    int b = p.B;

                    // setta il colore del pixel
                    if (a != 0)
                        bmp_new.SetPixel(x, y, myColor);
                }

            }

            button_1_img.Source = BitmapToImageSource(bmp_new);
            button_2_img.Source = BitmapToImageSource(bmp_new);
            button_3_img.Source = BitmapToImageSource(bmp_new);
            button_4_img.Source = BitmapToImageSource(bmp_new);

        }

        // -----------------------------------------------
        // PAGE
        // -----------------------------------------------

        // -----------------------------------------------
        // BARRA
        // -----------------------------------------------

        // -----------------------------------------------
        // ALTRI
        // -----------------------------------------------

        BitmapImage BitmapToImageSource(Bitmap bitmap)
        {
            using (MemoryStream memory = new MemoryStream())
            {
                bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
                memory.Position = 0;
                BitmapImage bitmapimage = new BitmapImage();
                bitmapimage.BeginInit();
                bitmapimage.StreamSource = memory;
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
                bitmapimage.EndInit();

                return bitmapimage;
            }
        }

        // -----------------------------------------------
        // END CLASS
        // -----------------------------------------------
    }
}
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top