Aggiungere Button a runtime

sabato 03 novembre 2007 - 11.35

tht85 Profilo | Newbie

Salve, sono nuovo del forum (e anche dell'ambiente Visual Studio)!

Avrei bisogno di un aiuto:
sto scrivendo una applicazione in Visual C++ (con Visual Studio .NET 2005):
devo poter aggiungere a runtime un oggetto Button (in realtà dovrei aggiungere un array di PictureBox, ma voglio partire dalla cosa più semplice).

Cercando in giro con Google ho capito che devo inserire il codice seguente:
Button ^b = gcnew Button; ... b->Location = System::Drawing::Point(50, 50); b->Name = L"b"; b->Size = System::Drawing::Size(112, 21); b->TabIndex = 1; b->Text = L"button"; b->UseVisualStyleBackColor = true; this->Controls->Add(b);

Effettivamente il compilatore non mi da errore, ma il Button non mi compare nel form !
Se invece inserisco lo stesso codice in InitializeComponent() viene visualizzato correttamente (ma non è quello che mi serve, devo poterlo inserire in una qualunque funzione).

Ho l'impressione che sia una schiocchezza, ma non riesco a venirne a capo...

Grazie in anticipo a chi mi vorrà aiutare !
Saluti.

JohnAsh Profilo | Junior Member

Ciao,

il codice mi sembra corretto. Precisamente in che funzione l'hai inserito? Prova a mettere una messagebox per avere la prova certa che effettivamente venga eseguito il pezzo di codice (es. se l'hai inserito nell'handler dell'evento click di un altro bottone, potrebbe essere che non hai associato correttamente l'handler al bottone e che quindi non venga proprio richiamato).

Come seconda ipotesi prova a mettere questo dopo aver creato il bottone a run-time (anche se non visualizzato):

for each (Control ^ctrl in this->Controls) MessageBox::Show(ctrl->Text);

In questo modo ti verranno visualizzate delle messagebox contenenti il testo di ogni controllo presente nella tua finestra.

Saluti

tht85 Profilo | Newbie

ti ringrazio; dopo la tua risposta ho capito che il codice era corretto e che dovevo guardare da un'altra parte, infatti si trattava di una niubbata (stendiamo un velo pietoso)...

...adesso sto usando l'array di PictureBox, lo creo in runtime così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e poi nell'evento associato dovrei riuscire a capire quale elemento dell'array ha generato l'evento; qui però ho l'errore:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ottengo l'errore "error C2440: 'type cast' : cannot convert from 'System::Object ^' to 'System::Windows::Forms::PictureBox'".

Sto cercando di capire come risolvere il problema, ma data l'urgenza che ho gradirei qualche aiuto.

Grazie ancora !
Saluti.



JohnAsh Profilo | Junior Member

Penso ti convenga aprire un nuovo 3d con un titolo appropriato per quest'altro problema ed intanto puoi accettare la risposta su questo.

In ogni caso prova a trasformare questo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Saluti

tht85 Profilo | Newbie

E' proprio quello che mi serviva, gentilissimo

JohnAsh Profilo | Junior Member

Di nulla .. accetta la risposta così chiudiamo il 3d.

Saluti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5