|
Because a Form represents a top level window (that is usually identified by a unique entry in the task bar), it seems nonintuitive (IMHO) to put a Form within another Form .
An acceptable alternative is to use an MDIClient in a Form . The MDIClient can of course contain any number of Form s. This preserves the task bar entry association and allows the app to offer multiple peer windows within the top level window.
/ravi
|
|
|
|
|
Hi Ravi,
As is probably clear from my post, I don't like the idea of putting a Form in a Form, in general.
But, it's interesting to note that you can do it in WinForms only if:
You set the Form to-be-contained's 'TopLevel property to 'false before you add it to the ControlCollection of its to-be-container Form: if you didn't do this, you will not receive a compile-time error, but will receive a run-time error.
MS does provide the 'ShowInTaskBar property for Forms in WinForms to control whether or not a Form appears in the TaskBar, but even if its 'ShowInTaskBar property is set to 'true, a Form contained in another Form will not show in the TaskBar, appear in the TabOrder facility, etc.
So, we're free to make a mess
bill
Google CEO, Erich Schmidt: "I keep asking for a product called Serendipity. This product would have access to everything ever written or recorded, know everything the user ever worked on and saved to his or her personal hard drive, and know a whole lot about the user's tastes, friends and predilections." 2004, USA Today interview
|
|
|
|
|
Why not use a TabControl and open a new TabPage i.s.o. a new Form in a Form?
|
|
|
|
|
joost.versteegen wrote: Why not use a TabControl and open a new TabPage i.s.o. a new Form in a Form? Hi, that's exactly how I feel ! I am strongly against using Forms within Forms except in very exceptional circumstances. I find an Application that uses a Tabbed UI to present multiple documents, or "workspaces," intuitive, natural to use.
For the case that you need floating palettes and other windows the user may want to move around, I always use UserControls.
I experiment with writing application prototypes that use multiple "independent" Forms as a form of research on UI design.
bill
Google CEO, Erich Schmidt: "I keep asking for a product called Serendipity. This product would have access to everything ever written or recorded, know everything the user ever worked on and saved to his or her personal hard drive, and know a whole lot about the user's tastes, friends and predilections." 2004, USA Today interview
|
|
|
|
|
|
I have two forms.
there is a button in the first form, when clicked will open up the second form.
Now what i want is that when i click the button on the first form again i want the second form to close.
i am aware of the code for opening a second form from the primary.
secondform.show();
but can any one help me in providing with the code for closing this second form???
the second form should close and the first form should stay open.
|
|
|
|
|
The simplest possible way to do this is:
private void btnVisibleControl_Click(object sender, EventArgs e)
{
secondForm.Visible = ! secondForm.Visible;
} But, what if the second Form shows a 'CloseBox, and the user closes it ? To guard against that you can define a FormClosing EventHandler in the second Form:
private void secondForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
} Note that 'secondForm will be closed when your first Form is closed automatically only if the 'secondForm was created and shown in your first Form's code. Automatic closing of Forms created in the "Main" Form's code, when the Main Form closes, is a standard behavior of the Windows Form programming model.
But, there's a better way, where all the code is put in the main Form:
private secondForm f2;
private string strClose = "Close Second Form";
private string strOpen = "Open Second Form";
private void FormTemplate_Load(object sender, EventArgs e)
{
f2 = new secondForm();
f2.FormClosing += f2_FormClosing;
btnVisibleControl.Text = strOpen;
}
private void f2_FormClosing(object sender, FormClosingEventArgs e)
{
f2.Hide();
btnVisibleControl.Text = strOpen;
e.Cancel = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (f2.Visible)
{
btnVisibleControl.Text = strOpen;
}
else
{
btnVisibleControl.Text = strClose;
}
f2.Visible = ! f2.Visible;
}
Google CEO, Erich Schmidt: "I keep asking for a product called Serendipity. This product would have access to everything ever written or recorded, know everything the user ever worked on and saved to his or her personal hard drive, and know a whole lot about the user's tastes, friends and predilections." 2004, USA Today interview
modified 23-Oct-13 10:45am.
|
|
|
|
|
thanx for the reply...
secondform.close();
this code worked
|
|
|
|
|
I can not make a data connection to SQL Server 2012. Everything is located on my laptop. I am a beginner trying to learn C#. I can access the database via a dataset with no problem. I have tried both: using System.Data.SqlClient;
using MySql.Data.MySqlClient;
SQLServer Login = SINGER1990-PC\SQLEXPRESS
Laptop Admin = singer1990
Here is the code to populate a combo box
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
namespace Access
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'pOSNowDataSet.tblItem' table. You can move, or remove it, as needed.
this.tblItemTableAdapter.Fill(this.pOSNowDataSet.tblItem);
}
private void Form1_Load_1(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
//This still causes error because cannot get correct server name
SqlConnection cs = new SqlConnection("SERVER=singer1990-pc\\sqlexpress-PC;DATABASE=POSNow;Trusted_Connection=True");
SqlDataAdapter da = new SqlDataAdapter("Select * FROM tblItem", cs);
DataTable dt = new DataTable();
da.Fill(dt);
//for (int i = 0; i < dt.Rows.Count; i++)
{
// cboSelectName.Items.Add(dt.Rows[i]["itemSKU"]);
cboSelectName.Items.Add("itemSKU");
}
}
}
}
|
|
|
|
|
Quote: "SERVER=singer1990-pc\\sqlexpress-PC;DATABASE=POSNow;Trusted_Connection=True"
Shouldn't that be:
"SERVER=singer1990-pc\\sqlexpress;DATABASE=POSNow;Trusted_Connection=True;"
Notice the removal of the -pc on the end of SQLExpress...
|
|
|
|
|
I don't exactly what else on your code etc.
so these are just some things that I noticed:
in the button2_Click method you create an SQLConnection. However you don't call the Open method of it to actually create that connection.
You create a DataTable and try to fill it, yet you don't do anything with that data in the DataTable
in the Form1_Load method you access a tblItemTableAdapter however there is no info about where it is declared, and how it should access a datasource.
It's very likely that you get some exceptions too. So wrap your code in
try {
} catch (Exception ex) {
}
If you get some exceptions this makes it easier for a) you to understand what is the problem and b) for us to try to help you.
|
|
|
|
|
Is it possible to open the Windows 8 keyboard from within C#?
Can anyone point me to a sample?
Many thanks
If it's not broken, fix it until it is
|
|
|
|
|
See: [^], and [^].
bill
Google CEO, Erich Schmidt: "I keep asking for a product called Serendipity. This product would have access to everything ever written or recorded, know everything the user ever worked on and saved to his or her personal hard drive, and know a whole lot about the user's tastes, friends and predilections." 2004, USA Today interview
|
|
|
|
|
Hi, Can someone help me parse the following XML with DotNet C# 4.0? I'm trying to do it with linq.
XML is as follows...
<?xml version="1.0" encoding="utf-8"?>
<result>
<USEROUT filename="Complete.csv">
<row>
<Error>0</Error>
<Description>"Success"</Description>
<Details>"(Job 1) No Errors detected"</Details>
</row>
<row>
<Error>0</Error>
<Description>"Success"</Description>
<Details>"(Job 2) Scheduling Complete. All available orders were planned."</Details>
</row>
</USEROUT>
<USEROUT filename="User_out.csv">
<row>
<ORDER>""</ORDER>
<CUST_NAME>"A24"</CUST_NAME>
<ADDRESS_1>""</ADDRESS_1>
<ADDRESS_2>""</ADDRESS_2>
<ADDRESS_3>""</ADDRESS_3>
<ADDRESS_4>""</ADDRESS_4>
<ZIPCODE>"XXX"</ZIPCODE>
<ROUTENAME>"Run-0001"</ROUTENAME>
<SEQUENCE>1</SEQUENCE>
<CALLTYPE>4</CALLTYPE>
<TASK_TYPE>0</TASK_TYPE>
<UNIT_1>0.00000</UNIT_1>
<UNIT_2>0.00000</UNIT_2>
<CUST_INFO1>""</CUST_INFO1>
<CUST_INFO2>""</CUST_INFO2>
<CUST_INFO3>""</CUST_INFO3>
<CUST_INFO4>""</CUST_INFO4>
<CUST_INFO5>""</CUST_INFO5>
<LATITUDE>0.00</LATITUDE>
<LONGITUDE>0.00</LONGITUDE>
<LOCATION>"XXX"</LOCATION>
<OPEN1>"00:00:00"</OPEN1>
<CLOSE1>"00:00:00"</CLOSE1>
<OPEN2>"00:00:00"</OPEN2>
<CLOSE2>"00:00:00"</CLOSE2>
<PROD_A>0</PROD_A>
<PROD_B>0</PROD_B>
<PROD_C>0</PROD_C>
<PROD_D>0</PROD_D>
<PROD_E>0</PROD_E>
<ARR_DAY>"Mon"</ARR_DAY>
<ARR_TIME>"19:00:00"</ARR_TIME>
<DEP_DAY>"Mon"</DEP_DAY>
<DEP_TIME>"19:00:00"</DEP_TIME>
<DURATION>0</DURATION>
<TRAV_TIME>0</TRAV_TIME>
<TRAV_DIST>0.000</TRAV_DIST>
<REVENUE>0.0000</REVENUE>
<STATUS>2</STATUS>
<DESCRIP>""</DESCRIP>
<START_DEP>"A24"</START_DEP>
<FINISH_DEP>"A24"</FINISH_DEP>
<TOT_DIST>61.000</TOT_DIST>
<TOT_TIME>102</TOT_TIME>
<TOT_DUTY>102</TOT_DUTY>
<VEHICLE_NAME>"PDA3"</VEHICLE_NAME>
</row>
<row>
<ORDER>"761"</ORDER>
<CUST_NAME>"YYY"</CUST_NAME>
<ADDRESS_1>"111"</ADDRESS_1>
<ADDRESS_2>"222"</ADDRESS_2>
<ADDRESS_3>"0.00"</ADDRESS_3>
<ADDRESS_4>"0.00"</ADDRESS_4>
<ZIPCODE>"XXX"</ZIPCODE>
<ROUTENAME>"Run-0001"</ROUTENAME>
<SEQUENCE>2</SEQUENCE>
<CALLTYPE>2</CALLTYPE>
<TASK_TYPE>2</TASK_TYPE>
<UNIT_1>0.00000</UNIT_1>
<UNIT_2>0.00000</UNIT_2>
<CUST_INFO1>""</CUST_INFO1>
<CUST_INFO2>""</CUST_INFO2>
<CUST_INFO3>""</CUST_INFO3>
<CUST_INFO4>""</CUST_INFO4>
<CUST_INFO5>""</CUST_INFO5>
<LATITUDE>0.00</LATITUDE>
<LONGITUDE>0.00</LONGITUDE>
<LOCATION>"XXX"</LOCATION>
<OPEN1>"19:00:00"</OPEN1>
<CLOSE1>"07:00:00"</CLOSE1>
<OPEN2>"00:00:00"</OPEN2>
<CLOSE2>"00:00:00"</CLOSE2>
<PROD_A>0</PROD_A>
<PROD_B>0</PROD_B>
<PROD_C>0</PROD_C>
<PROD_D>0</PROD_D>
<PROD_E>0</PROD_E>
<ARR_DAY>"Mon"</ARR_DAY>
<ARR_TIME>"19:16:00"</ARR_TIME>
<DEP_DAY>"Mon"</DEP_DAY>
<DEP_TIME>"19:25:00"</DEP_TIME>
<DURATION>9</DURATION>
<TRAV_TIME>16</TRAV_TIME>
<TRAV_DIST>6.000</TRAV_DIST>
<REVENUE>0.0000</REVENUE>
<STATUS>2</STATUS>
<DESCRIP>""</DESCRIP>
<START_DEP>"A24"</START_DEP>
<FINISH_DEP>"A24"</FINISH_DEP>
<TOT_DIST>61.000</TOT_DIST>
<TOT_TIME>102</TOT_TIME>
<TOT_DUTY>102</TOT_DUTY>
<VEHICLE_NAME>"PDA3"</VEHICLE_NAME>
</row>
<row>
<ORDER>"762"</ORDER>
<CUST_NAME>"111"</CUST_NAME>
<ADDRESS_1>"222"</ADDRESS_1>
<ADDRESS_2>"333"</ADDRESS_2>
<ADDRESS_3>"0.00"</ADDRESS_3>
<ADDRESS_4>"0.00"</ADDRESS_4>
<ZIPCODE>"XXX"</ZIPCODE>
<ROUTENAME>"Run-0001"</ROUTENAME>
<SEQUENCE>3</SEQUENCE>
<CALLTYPE>2</CALLTYPE>
<TASK_TYPE>2</TASK_TYPE>
<UNIT_1>0.00000</UNIT_1>
<UNIT_2>0.00000</UNIT_2>
<CUST_INFO1>""</CUST_INFO1>
<CUST_INFO2>""</CUST_INFO2>
<CUST_INFO3>""</CUST_INFO3>
<CUST_INFO4>""</CUST_INFO4>
<CUST_INFO5>""</CUST_INFO5>
<LATITUDE>0.00</LATITUDE>
<LONGITUDE>0.00</LONGITUDE>
<LOCATION>"XXX"</LOCATION>
<OPEN1>"19:00:00"</OPEN1>
<CLOSE1>"07:00:00"</CLOSE1>
<OPEN2>"00:00:00"</OPEN2>
<CLOSE2>"00:00:00"</CLOSE2>
<PROD_A>0</PROD_A>
<PROD_B>0</PROD_B>
<PROD_C>0</PROD_C>
<PROD_D>0</PROD_D>
<PROD_E>0</PROD_E>
<ARR_DAY>"Mon"</ARR_DAY>
<ARR_TIME>"19:51:00"</ARR_TIME>
<DEP_DAY>"Mon"</DEP_DAY>
<DEP_TIME>"20:00:00"</DEP_TIME>
<DURATION>9</DURATION>
<TRAV_TIME>26</TRAV_TIME>
<TRAV_DIST>24.000</TRAV_DIST>
<REVENUE>0.0000</REVENUE>
<STATUS>2</STATUS>
<DESCRIP>""</DESCRIP>
<START_DEP>"A24"</START_DEP>
<FINISH_DEP>"A24"</FINISH_DEP>
<TOT_DIST>61.000</TOT_DIST>
<TOT_TIME>102</TOT_TIME>
<TOT_DUTY>102</TOT_DUTY>
<VEHICLE_NAME>"PDA3"</VEHICLE_NAME>
</row>
<row>
<ORDER>"764"</ORDER>
<CUST_NAME>"ZZZZ"</CUST_NAME>
<ADDRESS_1>"111"</ADDRESS_1>
<ADDRESS_2>"222"</ADDRESS_2>
<ADDRESS_3>"333"</ADDRESS_3>
<ADDRESS_4>"444"</ADDRESS_4>
<ZIPCODE>"XXX"</ZIPCODE>
<ROUTENAME>"Run-0001"</ROUTENAME>
<SEQUENCE>4</SEQUENCE>
<CALLTYPE>2</CALLTYPE>
<TASK_TYPE>2</TASK_TYPE>
<UNIT_1>0.00000</UNIT_1>
<UNIT_2>0.00000</UNIT_2>
<CUST_INFO1>""</CUST_INFO1>
<CUST_INFO2>""</CUST_INFO2>
<CUST_INFO3>""</CUST_INFO3>
<CUST_INFO4>""</CUST_INFO4>
<CUST_INFO5>""</CUST_INFO5>
<LATITUDE>0.00</LATITUDE>
<LONGITUDE>0.00</LONGITUDE>
<LOCATION>"XXX"</LOCATION>
<OPEN1>"19:00:00"</OPEN1>
<CLOSE1>"07:00:00"</CLOSE1>
<OPEN2>"00:00:00"</OPEN2>
<CLOSE2>"00:00:00"</CLOSE2>
<PROD_A>0</PROD_A>
<PROD_B>0</PROD_B>
<PROD_C>0</PROD_C>
<PROD_D>0</PROD_D>
<PROD_E>0</PROD_E>
<ARR_DAY>"Mon"</ARR_DAY>
<ARR_TIME>"20:01:00"</ARR_TIME>
<DEP_DAY>"Mon"</DEP_DAY>
<DEP_TIME>"20:10:00"</DEP_TIME>
<DURATION>9</DURATION>
<TRAV_TIME>1</TRAV_TIME>
<TRAV_DIST>0.000</TRAV_DIST>
<REVENUE>0.0000</REVENUE>
<STATUS>2</STATUS>
<DESCRIP>""</DESCRIP>
<START_DEP>"A24"</START_DEP>
<FINISH_DEP>"A24"</FINISH_DEP>
<TOT_DIST>61.000</TOT_DIST>
<TOT_TIME>102</TOT_TIME>
<TOT_DUTY>102</TOT_DUTY>
<VEHICLE_NAME>"PDA3"</VEHICLE_NAME>
</row>
<row>
<ORDER>""</ORDER>
<CUST_NAME>"A24"</CUST_NAME>
<ADDRESS_1>""</ADDRESS_1>
<ADDRESS_2>""</ADDRESS_2>
<ADDRESS_3>""</ADDRESS_3>
<ADDRESS_4>""</ADDRESS_4>
<ZIPCODE>"XXX"</ZIPCODE>
<ROUTENAME>"Run-0001"</ROUTENAME>
<SEQUENCE>5</SEQUENCE>
<CALLTYPE>4</CALLTYPE>
<TASK_TYPE>0</TASK_TYPE>
<UNIT_1>0.00000</UNIT_1>
<UNIT_2>0.00000</UNIT_2>
<CUST_INFO1>""</CUST_INFO1>
<CUST_INFO2>""</CUST_INFO2>
<CUST_INFO3>""</CUST_INFO3>
<CUST_INFO4>""</CUST_INFO4>
<CUST_INFO5>""</CUST_INFO5>
<LATITUDE>0.00</LATITUDE>
<LONGITUDE>0.00</LONGITUDE>
<LOCATION>"XXX"</LOCATION>
<OPEN1>"00:00:00"</OPEN1>
<CLOSE1>"00:00:00"</CLOSE1>
<OPEN2>"00:00:00"</OPEN2>
<CLOSE2>"00:00:00"</CLOSE2>
<PROD_A>0</PROD_A>
<PROD_B>0</PROD_B>
<PROD_C>0</PROD_C>
<PROD_D>0</PROD_D>
<PROD_E>0</PROD_E>
<ARR_DAY>"Mon"</ARR_DAY>
<ARR_TIME>"20:42:00"</ARR_TIME>
<DEP_DAY>"Mon"</DEP_DAY>
<DEP_TIME>"20:42:00"</DEP_TIME>
<DURATION>0</DURATION>
<TRAV_TIME>31</TRAV_TIME>
<TRAV_DIST>29.000</TRAV_DIST>
<REVENUE>0.0000</REVENUE>
<STATUS>2</STATUS>
<DESCRIP>""</DESCRIP>
<START_DEP>"A24"</START_DEP>
<FINISH_DEP>"A24"</FINISH_DEP>
<TOT_DIST>61.000</TOT_DIST>
<TOT_TIME>102</TOT_TIME>
<TOT_DUTY>102</TOT_DUTY>
<VEHICLE_NAME>"PDA3"</VEHICLE_NAME>
</row>
</USEROUT>
</result>
I have a class as follows for the results...
public class Callout
{
public string CalloutID { get; set; }
public string TaskType { get; set; }
public string ArrDay { get; set; }
public string ArrTime { get; set; }
public string VehicleName { get; set; }
public string Sequence { get; set; }
}
My code I am using is as follows...
Stream ReceiveStream = myWebResponse.GetResponseStream();
StreamReader readStream = new StreamReader(ReceiveStream);
string responseString = readStream.ReadToEnd();
List<Callout> jobList =
(
from item in XDocument.Parse(responseString).Elements("row")
select new Callout
{
CalloutID = (string)item.Element("ORDER"),
TaskType = (string)item.Element("TASK_TYPE"),
ArrDay = (string)item.Element("ARR_DAY"),
ArrTime = (string)item.Element("ARR_TIME"),
VehicleName = (string)item.Element("VEHICLE_NAME"),
Sequence = (string)item.Element("SEQUENCE")
}).ToList();
My code doesn't throw any errors, the string variable responseString holds the XML correctly, but nothing goes into the jobList from the Linq query.
Where am I going wrong?
Many thanks.
|
|
|
|
|
You're calling .Elements("row") on the XDocument instance. The document only contains a single element, which is the root element of the XML document.
You'll need to use the Descendants method to find the rows. You'll also need to restrict the scope to the relevant USEROUT node, since the row elements under the first node don't match your expected layout.
List<Callout> jobList = XDocument.Parse(responseString)
.Descendants("USEROUT")
.Where(el => string.Equals((string)el.Attribute("filename"), "User_out.csv", StringComparison.OrdinalIgnoreCase))
.Descendants("row")
.Select(item => new Callout { ... })
.ToList();
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard, Firstly, thanks for taking the time to respond.
You answer was exactly what I needed - many thanks for this.
One quick question... Is it possible to add some sort of where clause into it so that only those rows with a TASK_TYPE = "2" are returned? Sorry, I'm new to parsing XML...
|
|
|
|
|
Something like this should do the trick:
List<Callout> jobList = XDocument.Parse(responseString)
.Descendants("USEROUT")
.Where(el => string.Equals((string)el.Attribute("filename"), "User_out.csv", StringComparison.OrdinalIgnoreCase))
.Descendants("row")
.Where(item => string.Equals((string)item.Attribute("TASK_TYPE"), "2", StringComparison.Ordinal))
.Select(item => new Callout { ... })
.ToList();
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
|
Hello. I need help in getting site ID and Status on IIS7 using Web Administration. I have this code
private string getSiteIdByName(string siteName)
{
DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC");
foreach (DirectoryEntry e in root.Children)
{
if (e.SchemaClassName == "IIsWebServer")
{
if (e.Properties["ServerComment"].Value.ToString().Equals(siteName, StringComparison.OrdinalIgnoreCase))
{
return e.Name;
}
}
}
return null;
}
private void showStatus(string siteId)
{
string result = "unknown";
DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC/" + siteId);
PropertyValueCollection pvc;
pvc = root.Properties["ServerState"];
if (pvc.Value != null)
result = (pvc.Value.Equals((int)ObjectState.Start) ? "Running" :
pvc.Value.Equals((int)ObjectState.Stop) ? "Stopped" :
pvc.Value.Equals((int)ObjectState.Pause) ? "Paused" :
pvc.Value.ToString());
labelStatus.Text = result + " (" + pvc.Value + ")";
}
but it really doesn't work well with some of our servers. Is there a way to use Web Administration for this? Any assistance is greatly appreciated.
Thanks!
|
|
|
|
|
Sir / Madam,
How to access .chm file present in zip file without extracting it ?
There are many .chm files used as resource in my windows application hence finding a way to do it without extracting them for saving disk space.
|
|
|
|
|
.chm themselves can be compressed by LZX[^], therefore I don't see a need to pack them in a zip-File. Another way of lowering the disk space needed by your .chm files is to lower the resolution of the images in them, if there are any.
Zip-File are Archives, and since they are compressed they don't offer the full functionality of a normal folder to access its contents, leading to problems as you scripted (No, you can't access .chm files stored in a Zip-Archive).
People becoming wiser in order to notice the stupid things they did back in the young days. This doesn't mean that they really stop doing those things. Wise people still do stupid things, only on purpose.
|
|
|
|
|
There are many .chm files in my windows application hence I have grouped them and zipped them separately.
Can you suggest any other way of doing this...
Thank you for the reply....
|
|
|
|
|
Extract/unzip the CHM (to a temp folder) when the user wants to view it, remove again when done.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
|
Ok, I have implemented the same procedure told by Eddy. But I was searching for the another possible ways for doing it...
Thank you for replying Eddy and Marco....
|
|
|
|