Working with buttons in Micro Focus Visual COBOL

Introductionl COBOL 

Micro Focus released VisualCOBOL R4 earlier this year and it has turned out to be an awesome addition to Visual Studio 2010. The development teams have done a great job in delivering a very usable product. To help you learn about VisualCOBOL and COBOL.NET in a managed environment we'd like to provide some example solutions. Now there are great samples that come with VisualCOBOL but they don't define or detail one specific control, they show a finished application and the user has to read through the code to figure out how the code was created.

Our examples will focus on a single control. We'll show you how to manipulate the properties of that control programmatically. We may have to include one additional control but the focus on each project will be on a single control with a supporting role for the additional control. This article is about the Button control.

In a previous article we introduced the Label control and also used the Button control in a 'supporting' role to the Label. The Button is what I like to refer to as an 'initiator', that is when the button is clicked or pushed it starts something. Buttons are made to tell the application that "I'm done entering something please go process it". The Button therefore not only has properties that we can change (color, text, etc.) programmatically but methods that we can call when an event occurs. There are numerous events associated with a Button but we'll concentrate on the main events. An event when it occurs invokes or calls a method to handle the situation that has just occurred. For those unfamiliar with the term 'method', a method is a piece of code that is executed when called called, kind of like a small program. We'll go into methods more in a little bit.

We're going to re-use our previous Label example for this article. The Label example was a nice, small compact example showing what happens when a button was clicked. It showed how to show and hide a button as well as how to change colors. Let's expand what we did last time a bit shall we?


We've already created the WinForm we'll be using. Remember, the intent is to learn how to manipulate Buttons, not create WinForms. Our WinForm was specifically designed to be simple and present only the basic information. It appears as:


Pretty simple, right? At the top we have a Label that says "This is a Label". We also have a button on the screen that says "Click Me". There are actually more controls but they are 'hidden' from the user right now. We'll go into more detail about hiding controls in the article. In our previous article the button was in a supporting role and not really explained in detail. In this article it's the star of the show so let's talk about it now.

Button Properties

Buttons, like all controls, have properties associated with them. Although there are many properties that can be manipulated there really are only a few that have any real implication when working with Buttons.

When working with properties the general format used to update a property is:

SET controlName::property TO {something}

Where: controlName is the name of the control

          Property is the name of the property to be manipulated

          {something} is specific to each property and can be text, Boolean, enums, etc.

We're going to concentrate our discussion on the following properties:




How the control is referenced programmatically


The actual text that is displayed to the user


Can you see the control. Accepts a Boolean value of 'true' or 'false'


The background color for the control


The color the text displayed in the Text property


Where does the text show-up in the labe

For information on the remaining properties for a Button or to review the properties above please see the Visual COBOL documentation or Microsoft Developer Network (MSDN).

Name Property

The Name property is used to provide a unique name to the control so it can be accessed programmatically. For Buttons I like to use the abbreviation 'btn' in the first three positions and then follow that with something specific to what the button is for. In our example the button says 'Click Me' so I've named the Button "btnClickMe". I like to use camel-case (capital letter for the first letter of each word) for readability purposes. I would highly recommend establishing a naming convention to be used in your shop.


Text Property

The Text property is what the user sees on the face of the Button. In most cases a Buttons 'face value' will not change and is set in the Properties panel. Our Text property contains the value "Click Me" as shown in the Property Panel:


Visible Property

The Visible property is used to either show or hide a control on a form. You can use hidden fields to store information that the user entered on a screen, as a counter or just about anything you don't want the user to see. In our example we use the Visible property to both show and hide different controls on the screen.There are actually two buttons on the Form with only one being visible. We use the 'Visible' property with a value of 'True' to show a control or a value of 'False' to hide a control.

The ClickMe button has it's Visible property set to true via the Property Panel.


For the Reset Button the Visible property is set to 'False' in the Property Panel:


The Visible property can be manipulated through code to either show or hide an existing control. When the ClickMe button is clicked we want to hide it and then show the Reset button. The code to perform this little trick is:


The first line of code shows a hidden label on the form. (lblHidden::Visible to true).

The next line of code shows a hidden button on the form. (btnReset::Visible to true).

The last line of code hides the 'Click Me' button. (btnClickMe::Visible to false).

BackColor Property

BackColor is used to define the color of the background in the Reset Button. In our example we set the color to Red with the following statement:


Visual COBOL R4 has made accessing native .NET classes very simple by inclusion of the keyword 'type'. "Type" enables you to directly access classes and properties without having to create Repository settings pointing to different classes.

In the supplied project try this, create a new line immediately after the BackColor line defined above and rekey the line just as it appears. When you enter the word 'type' intelli-sense will see you've entered a keyword and a pop-up will appear with different classes from which to choose from. Enter in 'co' for color and the following is displayed.


Enter the two semi-colons and another popup will appear with the attributes you can select for the different colors.


Try experimenting with the code, changing the color. You'll see how easy VCr4 makes this.

ForeColor Property

The ForeColor property is used to define the color the text in the Label will be displayed with. The process is similar to that of the BackColor and thus we won't go into a deep explanation. The code to change the ForeColor property is:


In our example we change the ForeColor on the displayed text to Crimson.

TextAlign Property

Shifting text from left to right, centering or moving to the upper or lower portion of a field is accomplished with the TextAlign property.


The process is similar to the way the color was changed with BackColor and ForeColor. We use the key word 'type' to gain access the Class 'System.Drawing.ContentAlignment'. You can then select the alignment you'd like to see from the pop-up provided.

Reset Button

The Reset button is used to return the application to position it was in when we the application first started. Study the code and the technique. There is nothing different in the method that what has already been discussed above, without all the comments in-line in the code.



If you're new to object-oriented programming you may not be familiar with the term 'event'. So before we talk about the events associated with the button object I thought I'd try and define just what an event is and why it's important in Visual COBOL and distributed programming in general.

From MSDN we have the following definition of an event:

"An event is a message sent by an object to signal the occurrence of an action. The action could be caused by user interaction, such as a mouse click, or it could be triggered by some other program logic. The object that raises the event is called the event sender. The object that captures the event and responds to it is called the event receiver."

Simple, right? Let me add some more explanation to this definition. Let's look at the first sentence: An event is a message sent by an object to signal the occurrence of an action. This is essentially the core explanation, something happens and a notice is sent out to do something. In our case the button is clicked (the something happens); a notice is sent out (a 'button click' event is raised); and something is done (the method btnClickMe_Click is executed). The rest of the definition is for information purposes, this first line is really what an event is: a notification that something has happened and someone has to address what has happened.

To access the events for the btnClickMe, in the properties Window select the button with the little lightning bolt on it. If you hover over it a tool-tip will appear informing you this is the button for events.


Click the lightning bolt and the following screen will be displayed (once all the sections are minimized):


If you'll notice I've left one section expanded, the Action area. The action 'Click' has an entry next to it (btnClickMe_Click). This is the method that will be executed when the button is clicked.

Each of the methods we've been working with in this article (btnClickMe_Click and btnReset_Click) were created to handle the Click event. Whether you were aware of it or not you were already working with event handlers when you were updating the methods for each of these two buttons. Told you it was simple!

If you expand each of the sections above there are numerous events that can be accounted for. A couple of popular events deal with the Mouse (MouseEnter, MouseHover and MouseLeave). For further information about events and event handlers refer to the Micro Focus Visual COBOL documentation or MSDN.


The ZIP file has all the necessary source code for you to follow along and see how to update the properties we've described in the article. Read through the code; learn from it and use it in your projects. Even though we used a WinForm to present the information, the same concepts apply to WPF or WebForms. Yes there may be differences but this should at least serve as a starting point to help you figure out how to manipulate similar properties in the other presentation environments. Also, if you have a Button property you're not sure how to work with send it to us. Chances are if you're having questions someone else is also and we'd like to help you figure it out and expand our examples!

Happy Coding!