我的按钮btnAction在第一次组合框cb1 textchanged事件后总是消失,并且永远不会出现。当emp和tmp不同时我希望这个按钮可见,而当它们不是时它是不可见的。
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Phone { get; set; }
public int? SalaryId { get; set; }
public virtual Salary Salary { get; set; }
public static bool operator ==(Employee le, Employee re)
{
if (le.FirstName != re.FirstName)
return false;
if (le.LastName != re.LastName)
return false;
if (le.Phone != re.Phone)
return false;
if (le.SalaryId != re.SalaryId)
return false;
if (le.Salary != re.Salary)
return false;
return true;
}
public static bool operator !=(Employee le, Employee re)
{
if (le.FirstName == re.FirstName)
return false;
if (le.LastName == re.LastName)
return false;
if (le.Phone == re.Phone)
return false;
if (le.SalaryId == re.SalaryId)
return false;
if (le.Salary == re.Salary)
return false;
return true;
}
}
public class Salary
{
[Key]
public int SalaryId { get; set; }
public string Name { get; set; }
public decimal? Amount { get; set; }
public static bool operator ==(Salary ls, Salary rs)
{
if (!ls.Name.Equals(rs.Name))
return false;
if (ls.Amount != rs.Amount)
return false;
return true;
}
public static bool operator !=(Salary ls, Salary rs)
{
if (ls.Name.Equals(rs.Name))
return false;
if (ls.Amount == rs.Amount)
return false;
return true;
}
}
和组合框cb1更改时调用的方法
public void cb1_OnTextUpdate(object sender, EventArgs e)
{
if(dataType == 1)
{
Employee tmp;
tmp = emp/*es*/;
tmp.FirstName = cb1.Text;
if (tmp == emp/*es*/)
this.btnAction.Visible = false;
if (tmp != emp/*es*/)
this.btnAction.Visible = true;
}
}
答案 0 :(得分:1)
使用此
public void cb1_OnTextUpdate(object sender, EventArgs e)
{
if(dataType == 1)
{
this.btnAction.Visible = !(cb1.Text == emp.FirstName)
}
}
但我认为你应该修改你的!=
运算符。假设两个雇员(emp1,emp2)只有相同的名字。
emp1 == emp2
,emp1 != emp2
都是假的!
答案 1 :(得分:0)
您从未创建过新的员工。
tmp = emp/*es*/;
此行为您提供另一个名为tmp
的变量,将同一员工引用为emp
。
tmp.FirstName = cb1.Text;
此行更改了您曾经拥有的唯一员工名字。最后,您将emp
与自身进行比较。如果您的运算符正确实现,那么它应该总是正确。
答案 2 :(得分:0)
两者都是一样的。因为temp
和emp
都引用同一个对象,如果它们中的任何一个对其值进行了任何更改。两者都会有这些变化。
你应该这样做:
if(cb1.Text == emp.FirstName)
this.btnAction.Visible = false;
else
this.btnAction.Visible = true;