根据所选员工更改按钮可见性

时间:2014-10-19 16:55:11

标签: c# .net winforms

我的按钮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;
    }
}

3 个答案:

答案 0 :(得分:1)

使用此

public void cb1_OnTextUpdate(object sender, EventArgs e)
{
    if(dataType == 1)
    {
       this.btnAction.Visible = !(cb1.Text == emp.FirstName)
    }
}

但我认为你应该修改你的!=运算符。假设两个雇员(emp1,emp2)只有相同的名字。

emp1 == emp2emp1 != emp2都是假的!

答案 1 :(得分:0)

您从未创建过新的员工。

tmp = emp/*es*/;

此行为您提供另一个名为tmp的变量,将同一员工引用为emp

tmp.FirstName = cb1.Text;

此行更改了您曾经拥有的唯一员工名字。最后,您将emp与自身进行比较。如果您的运算符正确实现,那么它应该总是正确。

答案 2 :(得分:0)

两者都是一样的。因为tempemp都引用同一个对象,如果它们中的任何一个对其值进行了任何更改。两者都会有这些变化。

你应该这样做:

if(cb1.Text == emp.FirstName)
    this.btnAction.Visible = false;
else
    this.btnAction.Visible = true;