Ver Mensaje Individual
  #1  
Antiguo 14-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En realidad lo que dice guillotmarc acerca de la "publicidad" de las componentes de un formulario es completamente cierto y sólo lleva a malas prácticas de programación que posteriormente dan dolores e cabeza.

Si un formulario tiene un Edit edtTalleres, la propiedad pública debiera ser el texto del control y no el control mismo.

En el caso concreto que nos ocupa entiendo lo siguiente:

Un formulario contiene una rejilla para visualizar los datos pero en lugar de editar éstos en la misma rejilla se desea abrir un formulario de captura, situación por demás normal ya que en muchas ocasiones la rejillasólo muestra unos cuantos de los campos a fin de que el usuario los pueda identificar.

Ahora bien, "normalmente", el forumulario de captura de datos contiene componente TDBEdit en lugar de simples TEdit (como en el presente caso) y dichos TDBEdit (u otros controles DB) están ligados a componentes DataSource localizados en un módulo de datos, como indica cadetill

Aunque de alguna manera también así accedemos a los controles de otro módulo (el datasource), en este caso, un módulo de datos, me parece apropiado y hasta necesario (¿de qué otra forma hacemos el enlace?)

Pero si por las razones que fueren, se insiste o se deben utilizar TEdits normales entonces lo más correcto, desde mi punto de vsta, sería, como mencioné arriba, publicar el texto de dichos controles:

Código:
type
  TForm3 = class(TForm)
  private
    function GetTalleres: String;
    procedure SetTalleres(Value: String);
  public
    property Talleres: String read GetTalleres write SetTalleres;
  end;

implementation
  function TForm3.GetTalleres: String;
  begin
    Result :=edtTalleres.Text;
  end;

  procedure TForm3.SetTalleres(Value: String);
  begin
    edtTalleres.Text := Value;
  end;
end.
De esta forma, cuando desde el formulario con la rejilla deseemos editar los datos de un registro pondríamos:

Código:
with TForm.Create(nil) do
begin
  Talleres := Table1.FieldByName('Talleres').AsString;
  { Otros campos }
  
  if ShowModal = ID_OK then
  begin
    Table1.FieldByName('Talleres').AsString := Talleres;
    { Otros campos }
    Table1.Post;
  end;

  Free;
end;
Así, el formulario con la rejilla usa del formulario de datos lo único que debe saber: sus datos; y no sus controles.

// Saludos
Responder Con Cita