【问题标题】:switch statement on FormLoadEventFormLoadEvent 上的 switch 语句
【发布时间】:2012-06-12 05:05:22
【问题描述】:

请问这是什么问题:

private void Form2_Load(object sender, EventArgs e)
{
    switch (Form2.Tag) //error
    {
        case "desc":
            MessageBox.Show("desc");
        break;

        case "sms":
            MessageBox.Show("sms");
        break;
    }
}

错误:

An object reference is required for the non-static field, method, or property System.Windows.Forms.Control.Tag.get

【问题讨论】:

标签: c# winforms switch-statement


【解决方案1】:

你可能想说this.Tag。引用Tag 属性将需要Form2 的实例,因此您会收到错误消息。

编辑:

忘记了 Tag 是一个对象。将其转换为字符串,您的语句应该可以工作:

switch ((string)this.Tag)

【讨论】:

  • 我用 this.Tag 替换了 Form2.Tag 并得到另一个错误:A switch expression or case label must be a bool, char, string, integer, enum, or对应的可空类型
【解决方案2】:

由于Tag 不是静态属性,您将无法通过类名(即 Form2)访问它。 Tag 也是 object 类型,不能在 switch 语句中使用。由于您的案例是字符串类型,您可以尝试以下操作:

 string tag = (string) this.Tag;
 switch (tag) //error
      {
           case "desc":
                MessageBox.Show("desc");
                break;
           case "sms":
                MessageBox.Show("sms");
               break;
      }    

【讨论】:

    【解决方案3】:

    你的代码应该是:

    switch ((string)this.Tag) 
    

    【讨论】:

    • 谢谢。两种解决方案都有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多