Passing data from main form to dialog box?

What is the best way to pass data from the mainform to a dialog box and then send data from the dialog back to the main form.

I want a CheckBoxlist on my dialog which gets populated by data which is accessible in the mainform.  Then when the user makes his/her selection and clicks ok, the list of selected items needs to be sent back to the mainform to be processed.  

???

I tried adding a parameter in the dialog form's create method, hoping I could pass in a TStringsList, but that didn't seem to work.  So how Can I do this??
TopherAPCAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
robert_marquardtConnect With a Mentor Commented:
I prefer it this way:

  with TMyDialog.Create do
    try
      // fill the controls of the dialog
      if ShowModal = mrOK then
      begin
        // pull the values from the controls
      end;
    finally
      Free;
    end;

If you use the dialog often then overwrite the ShowModal and add some parameters for the fill/pull actions. Fill and pull then reside in the TMyDialog unit.
0
 
CynnaCommented:
TopherAPC,

I presume you're using modal form as a dialog.
Well, if you TStringsList, one solution could be
like this:
(say Form1 is your main form, and Form2 is your dialog form)

In your dialog form (Form2)add method GetResults():

type
  TForm2 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure GetResults(var Result: TStringList);
  end;

(.....)

procedure TForm2.GetResults(var Result: TStringList);
begin
   // Do something with Result, passed from main form:
   Button1.Caption:=Result.Strings[0];
   // ..... use data ....
   ShowModal;
   // Store whatever you want in Result:  
   Result.Clear;
   Result.Add('some data');
   Result.Add('some more data');
   //.... etc....
end;



In your main form(Form1), you then call your dialog like this:

procedure TForm1.Button1Click(Sender: TObject);
var Results: TStringList;
begin
  try
    Results:=TStringList.Create;
    Results.Add('Press me!');
    // This is the way to show your dialog form and send it data:
    Form2.GetResults(Results);
    // Results now has data from dialog form:
    Button1.Caption:=Results.Strings[0];
    // ...etc...
  finally
    Results.Free;
  end;
end;


0
 
Lee_NoverCommented:
use the roberts way - also how I have it :)
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
bogiboyCommented:
How I do it is:

In MainForm:

...
if (not assigned(myDialog1)) then AppliCation.CreateForm(TMyDialog,MyDialog1);
MyDialog.CheckBoxList1.Clear;
//fill in checklistbox items from here
for i:=0 to mydataSet.recordcount-1 do
  begin
   MyDialog.CheckBoxList1.Items.Add(myDataSet.Fields    [1].AsString);
   myDataset.next;
  end;
  if MyDialog1.ShowModal=mrOK then
   begin
    for i:=0 to MyDialog1.CheckListBox1.Items.Count-1 do
      begin
     strListItem:=MyDialog1.CheckListBox1.Items[i];
      //do something with selected value
       end;
sometimes, I create array of String dynamic array for this case , so I can destroy dialog when I am finished with reading values from the checklistbox.
     



0
 
bogiboyCommented:
Sorry Robert, I repeated your answer...what I am doing is actually what you are proposing...
0
 
SpideyModCommented:
Force Accepted

SpideyMod
Community Support Moderator @Experts Exchange
0
All Courses

From novice to tech pro — start learning today.