nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Pubblica un file zip con il progetto da scaricare così si capisce finalmente cosa fai ...
Ultima modifica effettuata da nessuno il 24/10/2015 alle 11:07
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
il file è questo:
http://www.mediafire.com/download/b849ot35iere7zm/WindowsF ...
stavo provando a fare lo stesso progetto di Thejust da capo per imparare ma non capisco come fa a richiamare la List<> dal Form1 senza instanziare nulla.
Nel progetto di Thejust il panel si vede diversamente da quello che ho fatto io.
Se potete spiegarmi come fare.
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Premetto che ho impostato a 5 le pictureBox iniziali (lo scrivo perchè non si sa mai può essere utile come informazione).
Quando premo il BDestro (button) le immagini una volta arrivata all'ultima deve continuare ripartendo dalla prima.
Quando premo il BSinistro (button) le immagini dalla prima riparte dall'ultima fino ad arrivare alla prima.
Per il button BDestro ho fatto cosi:
Codice sorgente - presumibilmente C# / VB.NET |
Offset++;
Steps = Offset;
for (int i = 0; i < Controls.Count; i++)
{
if (Controls[i].GetType() == typeof(PictureBox))
{
if (Steps >= _images.Count - 1) Steps = -1;
Controls[i].BackgroundImage = _images[++Steps];
//Steps++;
}
}
|
I problemi sono 2
1. Nella prima pictureBox non parte subito dalla seconda ma dalla terza per poi continuare bene.
2. E' che arriva all'ultima ricomincia ma fa solamente un giro poi non continua più.
Per il pulsante BSinistro il codice è questo:
Codice sorgente - presumibilmente C# / VB.NET |
Offset--;
Steps = Offset;
for (int i = 0; i < Controls.Count; i++)
{
if (Controls[i].GetType() == typeof(PictureBox))
{
if (Steps < 1) Steps = _images.Count;
Controls[i].BackgroundImage = _images[--Steps];
//Steps--;
}
}
|
Ma il problema è che una volta premuto il pulsante nella prima pictureBox viene messa l'ultima ma mi scombina le altre sulla destra e in più non continua a ruotare.
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Riguardo alle pictureBox, Assicurati che nelle priprieta' sia impostato 4 e non 5.
Anche lo 0 viene contato.
Visto che ti trovi, modifica anche direttamentr il valore della variabile
NumPictureBox.
Cioe' la prima varibile subito dopo l'inizializzazione dei componenti.
Se sballa il conteggio o continua a scorrere significa che l'indice e settato male.
Ultima modifica effettuata da Thejuster il 26/10/2015 alle 9:57
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ho impostato 5
Codice sorgente - presumibilmente C# / VB.NET |
private int _numpicbox = 5; //Per il numero di pictureBox
|
Io vorrei far girare sempre le immagini sia in un verso che nell'altro, ho provato cosi:
Codice sorgente - presumibilmente C++ |
public void MoveRight() { Offset++; Steps = Offset; for (int i = 0; i < Controls.Count; i++) { if (Controls[i].GetType() == typeof(PictureBox)) { if (Steps >= _images.Count - 1) Steps = -1; Controls[i].BackgroundImage = _images[++Steps]; //Steps++; } } }
|
ma si ferma dopo un giro.
Mi puoi consigliare per non riesco proprio farlo grazie. |
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Per ottenere quello che dici, serve un'altro algoritmo. questo non va bene.
Questo è scritto per arrivare all'ultimo frame e fermarsi per poi abilitare il reverse.
Non è stato concepito per continuare a scorrere.
Prova a ragionare con la tua testa.
Come faresti per farlo girare in continuazione?
prova a mostrarmi qualcosa di tuo
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao Thejuster scusami per il ritardo di risposta, ma ho avuto problemi ora risolti, e sono di nuovo qui.
Ti posto il codice del progetto che ho fatto per far ruotare le immagini, e funziona (se c'è un modo migliore (o corretto) se ti va ti spiegarmelo ti sarei grato) ma c'è un problema.
Il link è questo:
http://www.mediafire.com/download/uwr9evo730xc8j8/Prova+im ...
Per questo esempio facciamo che si può solo cliccare sulla pictureBox1.
Quando clicco sulla pictureBox1 con l'immagine sotto ad esempio A deve scrivere sulle label un testo.
Esempio label1.Text = "Frase1"
label2.Text = "Frase2"
Se premo sul pulsante per far ruotare le immagini spostando nella pictureBox1 l'immagine B, nelle label deve scrivere:
Esempio label1.Text = "Frase3"
label2.Text = "Frase4"
e cosi via, ma non riesco, nel progetto nell' evento clic della pictureBox c'è il codice di prova che ho fatto, ma non funziona.
Un aiuto per favore, grazie in anticipo.
Ultima modifica effettuata da lupetto77 il 15/03/2016 alle 2:33 |
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
puoi mediare alle strutture ed assegnare un riferimento ad ogni immagine che avrà un tag o come dire un un nome.
Che al click sarà visualizzato sulla label.
un esempio è:
Codice sorgente - presumibilmente C# |
public struct _immagini { public Image img; public string riferimento; } List <_immagini > Immagini = new List <_immagini >();
|
Al form load. Invece di aggiungere direttamente un elemento nella lista
Codice sorgente - presumibilmente Plain Text |
immagini.Add(Properties.Resources.A);
immagini.Add(Properties.Resources.B);
immagini.Add(Properties.Resources.C);
//ecc. ecc.
|
fai in questo modo
Codice sorgente - presumibilmente C# / VB.NET |
//preparo la struttura
_immagini img = new _immagini();
img.img = Properties.Resource.A;
img.riferimento = "Lettera A";
Immagini.Add(img);
|
Quando scorri le immagini:
Codice sorgente - presumibilmente C++ |
private void btnSinistra_Click(object sender, EventArgs e) { // Richiamo il metodo per spostare di uno la posizione RuotaASinistra(1); // Visualizzo nelle pictureBox le immagini ruotate int conta = 0; for (int i = Controls.Count - 1; i >= 0; i--) { if (Controls[i].GetType() == typeof(PictureBox)) { //Così Controls[i].BackgroundImage = Immagini[conta].img; Controls[i].Tag = Immagini[conta].riferimento; conta++; } } } private void btnDestra_Click(object sender, EventArgs e) { // Richiamo il metodo per spostare di uno la posizione RuotaADestra(1); //// Visualizzo nelle pictureBox le immagini ruotate int conta = 0; for (int i = Controls.Count - 1; i >= 0; i--) { if (Controls[i].GetType() == typeof(PictureBox)) { //Così Controls[i].BackgroundImage = Immagini[conta].img; Controls[i].Tag = Immagini[conta].riferimento; conta++; } } }
|
Al click sulle pictureBox;
Codice sorgente - presumibilmente C# / VB.NET |
private void pictureBox1_Click(object sender, EventArgs e)
{
label1.Text = pictureBox1.Tag.ToString(); //Applico il testo recuperato dal tag.
}
|
In questo modo dovrebbe funzionarti.
In pratica le pictureBox hanno un campo nelle proprietà chiamato Tag.
in quel campo puoi scriverci riferimenti o qualcosa su cui tenere a memoria.
anche un appunto esempio.
Quando scorri, devi fare in modo di applicare ad ogni pictureBox il suo relativo Tag recuperato dalla struttura.
Così al Click, verrà mostrato il Tag che la pictureBox contiene.
Puoi anche crearti un controllo ereditato ed inserire quanti campi ti fanno comodo.
oppure al tag puoi aggiungere un separatore di stringa,
e splittare il contenuto per poi recuperare un array.
esempio:
Codice sorgente - presumibilmente Plain Text |
Tag = "Frase 1|Frase 2|Frase 3";
string[] t = Tag.Split('|');
label1.text = t[0];
label2.text = t[1];
label3.text = t[2];
|
|
|