Highlighted
Super Contributor.
Super Contributor.
2181 views

Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

My solution has a C# project and a COBOL project.  Several text boxes are entered on a C# form which then calls a COBOL program to do the validation.  The C# project has a reference to the COBOL project so that it can create an instance of the COBOL program before calling it.  There are several ways I can pass the text box values to the COBOL program.

1. Pass them in linkage, including use of smart linkage (can use smart linkage if the COBOL program is not a class).

2. Declaring properties in the COBOL program and setting them from the C# program before calling it.

3. Passing the Windows form object to the COBOL program and using its Controls collection to get the Text properties of each text box I need to   validate. 

The code for the last method looks like this:

 method-id ValidateMethod.
       local-storage section.
    
       01 ctrls type System.Windows.Forms.Control occurs any.

       01 client-name pic x(30).
       
       linkage section.
       01 oform type System.Windows.Forms.Form.
       procedure division using oform.
   
           SET ctrls to  oform::Controls::Find("tbClientName", true)
           if ctrls::Count = 1
               set client-name to ctrls(1)::Text.
         
          
           goback
       end method.

An advantage to using the third method is I don't have to add properties to my COBOL program or pass a group of fields in linkage.  I can also set the Text property of a text box from COBOL if I need to update it.  I can't add a reference in my COBOL project to the C# project because that would be a circular dependency and it's not allowed, so I can't add property declarations to my C# class which I would be able to get from COBOL.

My question is, is this third method even legit ?  The controls of a form are private to the form class which encapsulates data and methods so we would normally get values from form controls via public properties.  But when your form has twenty or more controls this method gets around the hassle of having to pass a large number of fields to the COBOL program or add a large number of get/set property statements to it.

Phil Levin

Tags (1)
0 Likes
1 Solution

Accepted Solutions
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

I have attached a sample which demonstrates a C# winform calling a COBOL class and passing a data only class as a parameter.

Thanks.

View solution in original post

0 Likes
4 Replies
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

What you suggest here breaks all rules of encapsulation as those form control fields are marked as private for a reason.

You could create properties or public methods in C# for each of the textbox controls so that you can return the value of these fields when the method is called.

You could then create an interface definition in a separate project that defines each of these properties or methods and you could pass the current form to the COBOL class as a parameter of the interface type so that its methods could be called. You would add references to the interface project in both the C# and COBOL classes.

What I would really suggest is that you create a separate data only class containing properties that you could instantiate and populate in c# and then pass this class to COBOL as a parameter.

This just seems like a much simpler and cleaner approach.

If you require examples of either of these methods, let me know and I will provide them to you.

Thanks.

0 Likes
Highlighted
Super Contributor.
Super Contributor.

RE: Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

Yes, please give me an example of using the data only class.

Thanks.

Phil Levin

0 Likes
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

I have attached a sample which demonstrates a C# winform calling a COBOL class and passing a data only class as a parameter.

Thanks.

View solution in original post

0 Likes
Highlighted
Super Contributor.
Super Contributor.

RE: Accessing properties of controls on a C# form from a managed COBOL program

Jump to solution

Thanks Chris.

Phil

Phil Levin

0 Likes
The opinions expressed above are the personal opinions of the authors, not of Micro Focus. By using this site, you accept the Terms of Use and Rules of Participation. Certain versions of content ("Material") accessible here may contain branding from Hewlett-Packard Company (now HP Inc.) and Hewlett Packard Enterprise Company. As of September 1, 2017, the Material is now offered by Micro Focus, a separately owned and operated company. Any reference to the HP and Hewlett Packard Enterprise/HPE marks is historical in nature, and the HP and Hewlett Packard Enterprise/HPE marks are the property of their respective owners.