2017-08-22 42 views
-1

我想要基于特定函数的返回值启用或禁用我的winform上的按钮。基本上,我正在尝试下面的代码在各种功能将返回不同的值的地方:C#Winforms基于函数的启用/禁用按钮

btnNewNotices.Enabled = isSelectedPrinterValid(); 
this.btnNewNotices.Refresh() 

但是,这是行不通的。为什么在启用属性更改后调用刷新方法时,该按钮未启用?我必须关闭表单并在按钮正确禁用之前重新打开它。什么是最好的方式来完成我所需要的,而不必反弹表格?

+0

你为什么要调用'Refresh()'? –

+0

你能否包含更多的上下文?你如何以及在哪里执行上述操作? – gmiley

+0

你检查过你的'isSelectedPrinterValid()'返回什么值吗?只要上面的方法返回你期望的值,这个代码应该工作。是的,你不需要'Refresh()'。 – Sach

回答

1

简短的回答,但它非常简单。

使用.Refresh();会导致按钮重新绘制自身,并重置Enabled属性。没有理由在你的上下文中使用它。只要删除它。

btnNewNotices.Enabled = isSelectedPrinterValid(); 
1

可以为Enabled属性添加一个Databinding。 如果你的方法是在你的Form实现,那么你可以定义一个Property

public bool IsSelectedPrinterValid 
{ 
    get{ return this.isSelectedPrinterValid(); } 
} 

,并添加数据绑定如下:

btnNewNotices.Databindings.Add("Enabled", this, "IsSelectedPrinterValid"); 

可以刷新你的价值:

btnNewNotices.Databindings[0].ReadValue(); 

的常用的方法是实现一个ViewModel,它包含你需要的所有属性和方法,并将你的控件绑定到这些。

相关问题