Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: mecoman - Giugno 03, 2015, 02:50:07 pm

Titolo: Eliminare edit da runtime
Inserito da: mecoman - Giugno 03, 2015, 02:50:07 pm
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:
Codice: [Seleziona]
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.
Titolo: Re:Eliminare edit da runtime
Inserito da: nomorelogic - Giugno 03, 2015, 03:20:21 pm
prova con un semplice:
Codice: [Seleziona]
Edit1.Free;
Titolo: Re:Eliminare edit da runtime
Inserito da: mecoman - Giugno 03, 2015, 03:27:32 pm
Ciao nomorelogic. Grazie mille per l'aiuto!!!  ;D ;D ;D
Titolo: Re:Eliminare edit da runtime
Inserito da: mecoman - Giugno 14, 2015, 05:56:09 pm
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:
Codice: [Seleziona]
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;
Titolo: Re:Eliminare edit da runtime
Inserito da: nomorelogic - Giugno 15, 2015, 03:25:24 pm
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:

Codice: [Seleziona]
  Tabella := TStringGrid(Form1.FindComponent(EditInterno.Text));
  if Tabella <> nil then
     Tabella.Free;
Titolo: Re:Eliminare edit da runtime
Inserito da: mecoman - Giugno 16, 2015, 12:11:39 pm
Ciao nomorelogic. Come sempre mi dai una grossa mano. Anche questa volta funziona alla grande!!! Grazieee ;D ;D