Ciao a tutti. Come da oggetto vorrei eliminare una edit da runtime.
Mi spiego meglio: in un form ho una edit ed un button. Quando clicco sul button vorrei che la edit venisse cancellata e non semplicemente resa invisibile.
Io ho scritto questo semplice codice:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.RemoveControl(edit1);
end;
Il problema è che quando clicco il button mi genera una eccezione, e dopo avermi generato l'eccezione mi elimina la edit; l'eccezione che mi viene generata la potete vedere in una delle due immagini che ho allegato.
Secondo voi dove sbaglio?
Ciao.
Ciao a tutti. Riapro questa discussione in quanto vorrei approfondire il discorso aperto un po di tempo fa.
Grazie a nomorelogic ho capito come eliminare una edit da una form via runtime.
Ora mi trovo in una situazione molto simile, ma a differenza di prima devo eliminare dalla mia form una TString.
Come potete vedere dall'allegato mi trovo in questa situazione: nella form ho due button (Inserisci - Elimina), ed una edit (EditInterno).
Il button Inserisci serve per inserire nuove tabelle nella form mentre il button Elimina serve per cancellare quella che non serve.
Se nella form è inserita una sola tabella tutto funziona perfettamente mentre se inserisco più di una tabella il button Elimina non funziona e non riesco a capire il perché :'(
Di seguito inserisco il codice che ho scritto:
var Tabella: TStringGrid;
procedure TFormInserimento.ButtonEliminaClick(Sender: TObject);
begin
If EditInterno.Text = Tabella.Name Then
Tabella.Free;
end;
procedure TFormInserimento.ButtonInserisciClick(Sender: TObject);
begin
// CREAZIONE DELLA GRIGLIA TABELLA E SUA POSIZIONE NEL FORM
Tabella:= TStringGrid.Create(Form1);
Tabella.Width:= 626;
Tabella.Height:= 280;
Tabella.DefaultRowHeight:= 20;
Tabella.Top:= 8;
Tabella.Left:= 14;
Tabella.Flat:= True;
Tabella.RowCount:= 10;
Tabella.FixedCols:= 0;
Tabella.ScrollBars:= ssAutoBoth;
Tabella.Options:= [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,
goRangeSelect,goSmoothScroll, goEditing];
Tabella.Name:= EditInterno.Text;
// CREAZIONE DELLE COLONNE DELLA TABELLA
Tabella.Columns.Add.Title.Alignment:= tacenter; // COLONNA 0
Tabella.Columns[0].Title.Caption:= ('Coefficiente1');
Tabella.Columns[0].Width:= 200;
Tabella.Columns.Add.Title.Alignment:= tacenter; // COLONNA 1
Tabella.Columns[1].Title.Caption:= ('Coefficiente2');
Tabella.Columns[1].Width:= 200;
Tabella.Columns.Add.Title.Alignment:= tacenter; // COLONNA 2
Tabella.Columns[2].Title.Caption:= ('Coefficiente3');
Tabella.Columns[2].Width:= 200;
Tabella.Parent:= Form1;
non funziona perché Tabella è un puntatore e punta sempre all'ultima istanza che hai creato con TString.Create
se hai una sola griglia allora funziona per forza, la prima è anche l'ultima
se ne hai più di una te la cancella se (e solo se): (stai cancellando l'ultima griglia creata) e (si chiama come specificato in EditInterno.Text)
per cancellare a seconda del nome puoi fare qualcosa come segue:
Tabella := TStringGrid(Form1.FindComponent(EditInterno.Text));
if Tabella <> nil then
Tabella.Free;