C#类问题-未识别对象
我在这个程序中遇到了一个问题,我不能让我的Calcpay方法在正确的位置输出,它的输出是错误的。我希望它在单击C#类问题-未识别对象,c#,streamreader,C#,Streamreader,我在这个程序中遇到了一个问题,我不能让我的Calcpay方法在正确的位置输出,它的输出是错误的。我希望它在单击computepay按钮时输出,但它无法识别那里的对象,当我将textbox7放在openToolStripMenuItem1\u单击进行测试时,结果显示为0。 提前谢谢你的帮助 public partial class Form1 : Form { public Form1() { InitializeCompon
computepay
按钮时输出,但它无法识别那里的对象,当我将textbox7
放在openToolStripMenuItem1\u单击
进行测试时,结果显示为0。
提前谢谢你的帮助
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//opens about page
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
}
//closes program
private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
{
this.Close();
}
//reads in data from text file, assigns to textboxes.
private void openToolStripMenuItem1_Click(object sender, EventArgs e)
{
double emphours;
double hourpay;
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "text files (*.txt)|*txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
StreamReader data = new StreamReader(myStream);
textBox1.Text = data.ReadLine();
textBox4.Text = data.ReadLine();
textBox2.Text = data.ReadLine();
textBox3.Text = data.ReadLine();
emphours = double.Parse(data.ReadLine());
hourpay = double.Parse(data.ReadLine());
Employee employ = new Employee(emphours, hourpay);
textBox5.Text = Convert.ToString(employ.EmpHours);
textBox6.Text = Convert.ToString(employ.EmpHourPay);
}
}
}
// The CalcPay_Clickmethod
// display employee net pay
private void computepay_Click(object sender, EventArgs e)
{
// need to get calcpay method to output here
//textbox7.Text = xx
}
}
}
public class Employee
{
const int TimeAndAHalfMarker = 40;
const double Federaltax = .20;
const double Statetax = .075;
const double TimeAndAHalf = 0.5;
private double netpay, grossPay, stateTax, federalTax;
public double EmpHours { get; private set; }
public double EmpHourPay { get; private set; }
public Employee(double emphours, double emphourpay)
{
EmpHours = emphours;
EmpHourPay = emphourpay;
}
public double Calcpay(double emphours, double emphourpay)
{
EmpHours = emphours;
EmpHourPay = emphourpay;
if (EmpHours > TimeAndAHalfMarker)
grossPay += (((EmpHours - TimeAndAHalfMarker) * EmpHourPay) * TimeAndAHalf);
federalTax = grossPay * Federaltax;
stateTax = grossPay * Statetax;
netpay = grossPay - stateTax - federalTax;
return netpay;
}
}
}
示例文本文件是:
玛丽·R·程序员
1237
北榆树大道17号
789-1000
40.0
15:00
一个问题是
openToolStripMenuItem1\u单击事件中的以下代码行:
Employee employ = new Employee(emphours, hourpay);
实例employ
需要有足够宽的作用域,以便表单上的其他事件访问它。
因此我建议把员工雇佣在表单级别上编写>并更改openToolStripMenuItem1\u单击
事件以显示:
employ = new Employee(emphours, hourpay);
然后,您可以根据需要在按钮单击事件中引用employ。您的Employee类不是静态的,必须实例化。你已经做到了:
Employee employ = new Employee(emphours, hourpay);
但是,您已经声明仅在该代码块的范围内使用。相反,在类级别声明它。例如:
Employee employ
public Form1()
{
InitializeComponent();
}
这个Employee
对象现在可以在该类的任何地方使用
在单击处理程序中:
private void computepay_Click(object sender, EventArgs e)
{
textbox7.Text = employ.CalcPay(employ.EmpHours, employ.EmpHoursPay).ToString();
}
由于employ
现在在整个类中都可用,因此该对象可以调用CalcPay
方法并获取值。作为建议,现在您可以了解对象的工作方式,您知道不需要显式地将EmpHours
和EmpHoursPay
添加到CalcPay
方法中。只有在对象是静态的情况下,才需要执行此操作 CalcPay是Employee类的一个方法,要调用该方法,需要能够引用该类的实例。您可以在stripmenu项事件处理程序中创建该类的实例,但不会将其存储在任何地方供以后使用
因此,您需要创建一个全局变量或表单级变量来存储实例(在strip菜单处理程序中创建),但也需要小心,创建实例并从不同的事件处理程序中使用它意味着您的用户必须确保事情按照正确的顺序完成……或者您需要执行以下操作:1./在调用实例之前测试实例是否为null(无论如何,您应该这样做);2./可能仅在创建Employee var后启用calc按钮
还有一点…命名你的UI元素 这是有史以来最好的问题标题。。。你可以看到很多风景。