Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    [C#]: quanto è bella la Y

    Scusate regà, ma questa mi sta facendo sganasciare dalle risate.

    In un mio programma ad un certo punto istanzio quattro variabili in questo modo:

    int xwm, ywm, wwm, hwm;

    Risultato:

    xwm, wwm e hwm valgono 0.
    ywm non esiste...

    Mi ci è voluto un pò per arrivarci perché non dà errori di nessun genere, quindi analizzando in debug la procedura in questione alla fine è saltato fuori questo strano comportamento...

    Mi son detto "Che abbia beccato una varibile protetta o roba del genere?"

    Allora ho rinominato tutto così:
    int x_wm, y_wm, w_wm, h_wm;

    Risultato:

    x_wm, w_wm e h_wm valgono 0.
    y_wm non esiste...

    Sono leggermente allibito... allora ho provato addirittura così:

    int x_wm, w_wm, h_wm;
    int y_wm;

    Niente... y_wm proprio non la vede.
    Allora mi son detto "Ma forse per qualche arcano motivo non vuole che le variabili inizino con la y...."
    E ho rinominato tutto così...

    int wmx, wmy, wmw, wmh;

    Non ci crederete, wmy non me la istanzia uguale

    Allora non capisco proprio, questo deve essere un baco di C#... :rollo:

    Altrimenti non si spiega...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Posta il codice completo... sospetto che ci sia una svista... (non per sfiducia...)
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Io per non saper nè leggere e nè scrivere ti posto l'intero metodo :P

    codice:
    public void Salva(String Percorso, PictureBox pic)
    
    {
    
        Bitmap bmp = new Bitmap(pic.Image);
    
        Bitmap back = new Bitmap(pic.Width, pic.Height);
    
        Graphics gra = Graphics.FromImage(back);
    
        Brush bru = new SolidBrush(this.Colore);
    
        gra.FillRectangle(bru, 0, 0, pic.Width, pic.Height);
    
        gra.DrawImage(bmp, 0, 0);
    
        if (!(wmlavorato == null))
    
        {
    
            int wmx, wmy, wmw, wmh, Lato;
    
            int wmipsilon;
    
            if (MantieniDimensioni)
    
            {
    
                if (immagine.Width > immagine.Height)
    
                    Lato = immagine.Width;
    
                else
    
                    Lato = immagine.Height;
    
                wmx = (int)(((float)picfake.Left / (float)picimgfake.Width) * (float)Lato);
    
                wmipsilon = (int)(((float)picfake.Top / (float)picimgfake.Width) * (float)Lato);
    
                wmw = (int)(((float)picfake.Width / (float)picimgfake.Width) * (float)Lato);
    
                wmh = (int)(((float)picfake.Height / (float)picimgfake.Width) * (float)Lato);
    
            }
    
            else
    
            {
    
                Lato = pic.Width;
    
                wmx = picfake.Left;
    
                wmipsilon = picfake.Top;
    
                wmw = picfake.Width;
    
                wmh = picfake.Height;
    
            }
    
            bmp = new Bitmap(wmlavorato, wmw, wmh);
    
            gra.DrawImage(bmp, wmx, wmipsilon);
    
        }
    
        if (Percorso.Substring(Percorso.Length - 3, 3).ToLower().Equals("eps"))
    
        {
    
            Percorso = Percorso.Substring(0, Percorso.Length - 3) + "jpg";
    
        }
    
        back.Save(Percorso, this.Compressione(Percorso));
    
    }
    Come noterai all'interno della if ho istanziato si wmy che wmipsilon, ma poi ho utilizzato la seconda, infatti, senza dare errori e niente, wmy non la istanzia, semplicemente è come se non l'avessi mai dichiarata.

    La stessa cosa la fa se la chiamo ywm o y_wm (non ho provato altre combinazioni...), quindi sembra che sia un problema riconducibile alla Y.

    Non ci sono variabili globali che si chiamano così quindi neanche potrebbe dipendere da questo, se riesci a capire dove sta l'inghippo sei un genio :P

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Hai dichiarato le variabili in un blocco di istruzioni, quindi direi che la loro validità è limitata a quel blocco, e non possono quindi essere utilizzate all'esterno di esso.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Infatti le utilizzo solo all'interno del blocco, t'assicuro che ho fatto il debug passo per passo mettendo un blocco all'inizio del metodo e quando l'istruzione passa la dichiarazione e vado acontrollare il contenuto delle variabili tutte mi danno "0" tranne wmy, se nella finestra immediata scrivo, con l'istruzione ferma immediatamente dopo la dichiarazione, ?wmy mi dice che non esiste, è stranissimo....

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Di quale classe fa parte quel metodo?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Guarda Alka, farò di più, se ti vuoi divertire ti passo tutto il progetto, perché è veramente da manicomio.

    http://www.debirusemenaia.com/Squarator2.zip

    Allora, per prima cosa non ti scandalizzare per il doppio senso del nome del progetto :P

    E' un pò raffazzonato perché è ancora da completare, ricomentare e ripulire dal codice non più utilizzato, però la cosa più interessante che devi provare è il metodo Salva in SquaretorClass.cs

    Ti do una dritta, tu metti un blocco dove ti pare in quel metodo, meglio se all'inizio, poi fai partire l'applicazione, da File scegli Apri cartella, poi apri un Watermark e scegli Salva tutto da File.

    Passerà tramite il metodo Salva e a quel punto constaterai anche tu il baco.

    Ciao!

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Io non ho problemi a compilare ed eseguire il software.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Ti credo, l'ho sistemato ed è funzionante, ma ho lasciato comunque la variabile impazzita per i posteri, nel metodo Save, come vedrai, dichiaro quattro variabili, tra cui wmy, però subito sotto dichiaro anche wmipsilon e poi utilizzo quella, wmy la lascio perdere, se tu però fai partire in debug il progetto mettendo un punto d'interruzione subito dopo la dichiarazione di queste variabili ti renderai conto che wmy non viene istanziata.

    Controlla :P

  10. #10
    Puoi allegare il file compilato che ci dò un'occhiata con ILDASM?
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.