|
the ping command of the system returns
"Reply from ..." if the system that is pinged is working or on.
and returns
"Request Timed out.." if the system is \switched off
now u need to write a thread and execute this ping command in that thread
and break the thread when u receive the Request timed out message
and display that to the user.
Regards,
Pramod
|
|
|
|
|
|
Hi, howzit.
I have a 2003 solution that I trying to open in VS 2005 but it keeps giving me this error message:
"Cannot be converted because it cannot be modifyed. To convert it change the permissions on the solution file to allow modification and re-open it"
How do I change the permissions on the solution file?
Thanks,
|
|
|
|
|
Check to see if the file is read only.
|
|
|
|
|
I tried that the first time, but it obviously did not change all the files to read/write, but now when I tried again it works, thanks man!
|
|
|
|
|
Hi, I have created a program first as a console application. Then I created a windows application and copied the class data there. It is shown below. In the console application, I have used the printData() method to output the data of an instance of a Person or Athlete class. I want to do the same, but now that output should be in the label. I have created the printWindows data() function but when I call it from the main function in the for loop it doesn't work.
Any help would be appreciated.
namespace windowsPracticingWithClasses
{
///
/// Summary description for Form1.
///
public class Person : System.Windows.Forms.Form
{
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
//My instance variables
private string firstName, lastName;
private int age;
private double height, weight;
private string bankName;
private double bankAccount;
private double balance = 0;
private string squareColor;
# region Properties
//Properties
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
and other properties.....
#endregion
//Custom constructor
public Person(int age, double height, double weight, string bankName, double bankAccount, double balance)
{
InitializeComponent();
this.age = age;
this.height = height;
this.weight = weight;
this.bankName = bankName;
this.bankAccount = bankAccount;
this.balance = balance;
}
public virtual void printData()
{
Console.WriteLine("\nProfile: \n\nAge: " + this.age);
Console.WriteLine("Height: " + this.height);
Console.WriteLine("Weight: " + this.weight);
Console.WriteLine("Bank Name: " + this.bankName);
Console.WriteLine("Bank Account: " + this.bankAccount);
Console.WriteLine("Balance: " + this.balance);
}
public void printWindowsData()
{
label1.Text += "Age: " + this.age;
label1.Text += "\nHeight: " + this.height;
label1.Text += "\nWeight: " + this.weight;
label1.Text += "\nBank Name: " + this.bankName;
label1.Text += "\nBank Account: " + this.bankAccount;
label1.Text += "\nBalance: " + this.balance;
}
class Athlete : Person
{
public string sport;
public Athlete(string sport) : base(23,5.6,120,"Chase",5671234,1000)
{
this.sport = sport;
}
public override void printData()
{
base.printData();
Console.WriteLine("Sport Practicing: " + this.sport);
}
};
class TestClasses
{
[STAThread]
static void Main()
{
Application.Run(new Person());
Person[] person = new Person[5];
person[0] = new Person(22,5.6,120,"Chase",5671234,2000);
person[0].printData();
Person[] athlete = new Athlete[3];
athlete[0] = new Athlete("Martial Arts");
athlete[0].FirstName = "Kim";
athlete[0].LastName = "Chung";
athlete[0].Age = 21;
athlete[0].Height1 = 5.7;
athlete[0].Weight = 130;
athlete[0].BankName = "Citi";
athlete[0].BankAccount = 212312;
athlete[0].Balance = 300;
for (int i = 0; i < athlete.Length; i++)
{
athlete[i].printWindowsData();
}
|
|
|
|
|
can u be more specific wht problem u r facing
does the label text goes blank or displays some text.
here u have used console.writeline
is ur project type Console or Windows Application?
check the project properties.
Regards,
Pramod
|
|
|
|
|
Hi, The initial program was in console application. That is where I used the printData() function. Then I decided to switch to windows application and show all the data in a label. The problem is that when I call athlete[i].printWindowsData in the for loop I see blank. No text is shown. However when I call the printWindows data from the Person constructor it shows the data but only what I passed to the constructor. I would like to see the whole array to be shown in a label.
Thank you.
|
|
|
|
|
Actually in Windows application u have created a class called TestClass
and called the person class in the main method,
this is not the correct way, us should create a form for that Test class
and then create the object in this class and use the same object for displaying the contents.
The problem is u have passed a variable in the
Application.run(new Person());
and u dont have reference to this object.
Hope u get this and that works for u
Regards,
Pramod
|
|
|
|
|
Thanks for your reply. Can you tell me how can I create a form for the TestClasses, and what to do next to make the array class be shown in the label?
|
|
|
|
|
first thinf is that dont create the Person class as a form,
Remove the inheriting statement i.e. System.Windows.Forms.Form from the
definition of the person class.
and then create the test class form and create the Array of the Person class and set the properties of the array objects and then display them in the label.
Hope u get it
Regards,
Pramod
|
|
|
|
|
Standard question #1:
What do you mean by "not working"?
---
b { font-weight: normal; }
|
|
|
|
|
It Doesn't show anything in the label. I would like to see the data stored in the array in the label.
Thank you.
-- modified at 15:42 Tuesday 24th January, 2006
|
|
|
|
|
For starters, don't use the form as the root of your class structure. The athlete instances are basically writing to labels that aren't being displayed because you never add the forms to your application.
Change your structure to have a person root class and an athlete class that inherits from that, and then maybe overload ToString() on your athlete class to provide the string that you want to put in your label:
class Athlete : Person
{
private string attribute1;
protected System.Windows.Forms.Label label1;
public string Attribute1 {get {return this.attribute1;} set {this.attribute1 = value;}}
public override string ToString()
{
return "blah blah blah" + this.Attribute1;
}
}
If you're going to manage your form from the Main method then you'll need a reference to it. Alternatively you can use the constructor or the attach to the form_load event to set up everything. You could possibly do something like this:
public class Form1 : System.Windows.Forms.Form
{
public Form1()
{
Athlete myAthlete = new Athlete();
myAthlete.Attribute1 = "Test";
this.label1.Text = myAthlete.ToString();
}
}
|
|
|
|
|
Thank you for the information. But How can I work this out when I hava a class array, like in my program. In the full version I have populated three elemnts of the array. Also how do I reference the form from the main Method?
Thank you.
|
|
|
|
|
Simply create the array of athletes and do something like this in the form's load event or constructor or in another method that you call from your Main method (i'll get to how to call the form from there in a minute)
this.label1.Text = "";
Athlete[] myArray = new Athelete[3];
for(int i =0; i < myArray.Length;i++)
{
label1.Text += myArray[i].ToString();
}
To call the form from your Main method you simply have to create the object and retain a reference to it by assigning it to a local variable:
Form1 myForm = new Form1();
Application.Run(myForm);
myForm.SomeMethod();
|
|
|
|
|
I tried to implement your suggestion as follows, and got this error:
An unhandled exception of type 'System.NullReferenceException' occurred in Unknown Module.
Additional information: Object reference not set to an instance of an object
Do you know why? My form is called Person. Is that the problem?
Thank you.
private void Person_Load(object sender, System.EventArgs e)
{
this.label1.Text = "";
Person[] person = new Person[5];
person[0] = new Person(22, 5.6, 120, "Chase", 5671234, 2000);
person[0].printWindowsData();
#region
Person[] athlete = new Athlete[3];
athlete[1] = new Athlete("Martial Arts");
athlete[1].FirstName = "Kim";
athlete[1].LastName = "Chung";
athlete[1].Age = 21;
athlete[1].Height1 = 5.7;
athlete[1].Weight = 130;
athlete[1].BankName = "Citi";
athlete[1].BankAccount = 212312;
athlete[1].Balance = 300;
;
#endregion
for (int i = 0; i < athlete.Length; i++)
{
label1.Text += athlete[i].ToString();
//athlete[i].printWindowsData();
}
}
class TestClasses
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Person person = new Person();
Application.Run(person);
//person.printWindowsData();
// Console.ReadLine();
}
}
|
|
|
|
|
Now I see the following text in the label: windowsPracticingWithClasses.Athlete, Text: PersonwindowsPracticingWithClasses.Athlete, Text:
PersonwindowsPracticingWithClasses.Athlete, Text:
Person
Do you know what that might mean?
Person is the class name, as well as Athlete, windowsPracticingWithClasses is a namespace. The word "Text" repeats 3 times. And I have 3 elements in the array: Person[] athlete = new Athlete[3]; All 3 are populated.
Just changed the code to this:
for (int i = 0; i < athlete.Length; i++)
label1.Text += athlete[i].Text.ToString();
And now I see "PersonPersonPerson" in the label.
The same happens when I write
label1.Text += athlete[i].Text;
Here is the relevant code again:
Thanks again.
private void Person_Load(object sender, System.EventArgs e)
{
this.label1.Text = "";
Person[] athlete = new Athlete[3];
athlete[0] = new Athlete("Figure Skating");
athlete[0].FirstName = "Sarah";
athlete[0].LastName = "Hughes";
athlete[0].Age = 20;
athlete[0].Height1 = 5.5;
athlete[0].Weight = 120;
athlete[0].BankName = "Chase";
athlete[0].BankAccount = 434324;
athlete[0].Balance = 200;
athlete[1] = new Athlete("Martial Arts");
athlete[1].FirstName = "Kim";
athlete[1].LastName = "Chung";
athlete[1].Age = 21;
athlete[1].Height1 = 5.7;
athlete[1].Weight = 130;
athlete[1].BankName = "Citi";
athlete[1].BankAccount = 212312;
athlete[1].Balance = 300;
athlete[2] = new Athlete("Soccer");
athlete[2].FirstName = "Joe";
athlete[2].LastName = "Tribiani";
athlete[2].Age = 22;
athlete[2].Height1 = 5.6;
athlete[2].Weight = 140;
athlete[2].BankName = "Apple";
athlete[2].BankAccount = 123124;
athlete[2].Balance = 400;
#endregion
for (int i = 0; i < athlete.Length; i++)
label1.Text += athlete[i].ToString();
}
class TestClasses
{
[STAThread]
static void Main()
{
Person person = new Person();
Application.Run(person);
}
}
-- modified at 2:14 Wednesday 25th January, 2006
|
|
|
|
|
Why are you making an array of type Person? Make the array of type Athlete and don't make the type inherit from any forms. The default behaviour of ToString() is to basically convert the type to a string. You'll notice in my original example that I overrode ToString() in the Athlete class to provide something sensical. You should do the same.
public override string ToString()
{
return "This is a proper value that will override the default behaviour of System.Object.ToString()";
}
There is no need for you to create arrays of forms when working with a simple data structure. If you have no need for inheritance then simply your structure so that everything athlete related is in a new class called Athlete, then make an array of this type. Getting rid of the inheritance might help you get a handle on the difference between your UI (the form) and your data structures (the athlete). You should also create your data structures in another file. Add a new class file called Athletes.cs to your solution and put the athlete class in there.
|
|
|
|
|
Hi Garry, I still can't make it work. I change the code to the one below. And I got this exception: An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication1.exe
Additional information: Object reference not set to an instance of an object.
:
It points to: person[0].Age = 22; - It all the way on the bottom. I tried so many different things, including putting all the class data in a different file. But first, I got the same exception as above, and second, the class didn't see the label. Thanks again for the help.
public class Person
{
//My instance variables
private string firstName, lastName;
private int age;
private double height, weight;
private string bankName;
private double bankAccount;
private double balance = 0;
private string squareColor;
//Properties
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public double Height1
{
get { return height; }
set { height = value; }
}
public double Weight
{
get { return weight; }
set { weight = value; }
}
public string BankName
{
get { return bankName; }
set { bankName = value; }
}
public double BankAccount
{
get { return bankAccount; }
set { bankAccount = value; }
}
public double Balance
{
get { return balance ; }
set { balance = value; }
}
public string SquareColor
{
get { return squareColor ; }
set { squareColor = value; }
}
//Custom constructor
public Person(int age, double height, double weight, string bankName, double bankAccount, double balance)
{
this.age = age;
this.height = height;
this.weight = weight;
this.bankName = bankName;
this.bankAccount = bankAccount;
this.balance = balance;
}
//Default constructor
public Person()
{
}
//My Methods
public void makeDeposit(int amount)
{
balance+= amount;
}
public void makeWithdrawal(int amount)
{
balance-= amount;
}
}
///
/// Summary description for Form1.
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(32, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(216, 184);
this.label1.TabIndex = 0;
this.label1.Text = "label1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
}
public class Test
{
[STAThread]
static void Main()
{
Application.Run(new Form1());
Person[] person = new Person[3];
person[0].Age = 22;
}
};
}
|
|
|
|
|
Also label1.Text += myArray[i].ToString(); - returns WindowsApplication1.Person. However when I type label1.Text = athlete[0].Age.ToString(); It shows the age in the label. Do I have to it for each instance or there is a way around it?
|
|
|
|
|
As I said, override ToString() on the Athlete class to return something proper, and make the array an array of Athlete rather than Person. You don't want to have the form anywhere near your data structure.
|
|
|
|
|
Ok. Thank you very much for the help. I am new to C# so tips are very helpfull.
Albert
|
|
|
|
|
I tried to override ToString but it doesn't see label1 in this function. Do you know why? Also I remove the clas Athlete from the program there is only person class, and the form.
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
}
public class Person
{
public Person(int age, double height, double weight, string bankName, double bankAccount, double balance)
{
this.age = age;
this.height = height;
this.weight = weight;
this.bankName = bankName;
this.bankAccount = bankAccount;
this.balance = balance;
}
public override string ToString()
{
Person[] person = new Person[3];
person[0] = new Person();
person[0].Age = 22;
label1. -////// no properties shown
return "";
}
}
-- modified at 22:48 Wednesday 25th January, 2006
|
|
|
|
|
You just want ToString to return a string for that current element. You don't want it to create an array or anything like that.
I've modified your code as an example:
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
Person[] arr = new Person[2];
arr[0] = new Person(12, 3.3, 3.3, "test", 3.3, 3.3);
arr[1] = new Person(15, 3.3, 3.3, "test", 3.3, 3.3);
this.label1.Text = "";
for (int i = 0; i < arr.Length; i++)
{
this.label1.Text += arr[i].ToString();
}
}
}
public class Person
{
public int age;
public double height;
public double weight;
public string bankName;
public double bankAccount;
public double balance;
public Person(int age, double height, double weight, string bankName, double bankAccount, double balance)
{
this.age = age;
this.height = height;
this.weight = weight;
this.bankName = bankName;
this.bankAccount = bankAccount;
this.balance = balance;
}
public override string ToString()
{
return this.Age;
}
}
|
|
|
|