尝试使用<action>更新控件

时间:2016-06-03 15:50:26

标签: c# windows winforms visual-studio-2015

我正在尝试使用一种方法来更新Windows窗体中的StatusStripLabel。具体来说,目前,我想要做的就是测试能够在用户点击按钮时更新该标签。我的代码就是这个(非常简单):

namespace CardReader
{
    public partial class frmRead : Form
    {
        public frmRead()
        {
            InitializeComponent();
        }


        private void btnProcess_Click(object sender, EventArgs e)
        {
            StatusUpdate((Button)sender,"Stand by...");
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnProcess_StatusUpdate(object sender, EventArgs e)
        { }

        private void frmRead_Load(object sender, EventArgs e)
        {
            btnProcess.StatusUpdate = p => this.tsStatus.Text = p.ToString();
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public Action<Button, string> StatusUpdate { get; set; }
    }
}

问题是在frmRead_Load事件中,Visual Studio 2015中的错误说: &#34; Button不包含StatusUpdate的定义,并且找不到包含Button类型的第一个参数的StatusUpdate的扩展方法。&#34;

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

首先,您的StatusUpdate操作位于表单中,而不是按钮。

其次,您的行动定义为:

public Action<Button, string> StatusUpdate { get; set; }

哪个匹配函数:

void StatusUpdate(Button b, string s){}

但你只是在这里指定一个参数匿名函数:

btnProcess.StatusUpdate = p => this.tsStatus.Text = p.ToString();

所有这一切应该是:

this.StatusUpdate = (p, s) => this.tsStatus.Text = p.ToString();