Solved

Passing data from main form to dialog box?

Posted on 2002-06-18
6
297 Views
Last Modified: 2010-08-05
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??
0
Comment
Question by:TopherAPC
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 7

Expert Comment

by:Cynna
ID: 7091245
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
 
LVL 11

Accepted Solution

by:
robert_marquardt earned 50 total points
ID: 7091841
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
 
LVL 12

Expert Comment

by:Lee_Nover
ID: 7092606
use the roberts way - also how I have it :)
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Expert Comment

by:bogiboy
ID: 7093639
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
 
LVL 1

Expert Comment

by:bogiboy
ID: 7097379
Sorry Robert, I repeated your answer...what I am doing is actually what you are proposing...
0
 

Expert Comment

by:SpideyMod
ID: 8280704
Force Accepted

SpideyMod
Community Support Moderator @Experts Exchange
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

687 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question