【问题标题】:using local variable in another button在另一个按钮中使用局部变量
【发布时间】:2011-04-15 21:34:46
【问题描述】:

出现错误:“设置的类型与标签的值表示不兼容。”

  string fi = null;


        public void reading(object sender, EventArgs e)
    { 
        read_from_folder = folderBrowserDialog1.ShowDialog();

        if (read_from_folder == DialogResult.OK)
        {
            files_in_folder = Directory.GetFiles(folderBrowserDialog1.SelectedPath);

            foreach (string fi files_in_folder)
            {
                string fi_nam = filese_in_folder.ToString();
                 ...
             }
          }
       }



    private void button1_Click(object sender, EventArgs e)
    {
                DicomDirectory cop = new DicomDirectory(fi);
                 cop.Load(fi);
    } 

【问题讨论】:

  • 如果字符串“fi”在方法外部定义,则它不是局部变量。如果这些 to 方法在同一个类中并且“fi”是该类的成员,这应该可以工作。
  • 不清楚fi的定义在哪里。也许你应该粘贴更多更清晰的代码:)
  • 发布一些更清晰的代码和准确的错误消息(如果有的话)。乍一看,您有一个定义为string fi; 的类成员变量,但您也在foreach 循环中使用string fi 作为本地变量。该本地将隐藏成员变量,要求您在提供竞争变量名称的方法中将成员变量称为this.fi
  • 您能选择一个答案吗,或者如果您想出了自己的答案,您可以发布它并将其标记为答案吗?谢谢!

标签: c# string file public


【解决方案1】:

我同意 Frederik 的观点,本地 fi 隐藏了类级成员。但目前尚不清楚您希望在按钮单击处理程序中的该变量中包含什么。

因为你在循环,如果你使用类成员fi,你只会引用最后一个文件。这可能没有意义。如果您在循环中搜索匹配项,并在该匹配项上停止,那么取消隐藏类级别 fi 将是有意义的,并且您拥有的代码将起作用。你具体想用fi做什么?

此外,您所使用的 for 循环不会像所列那样工作......应该是:

//  Missing the 'in'
foreach (string fi in files_in_folder)


* 更新 * 针对您对问题的更改,您在哪里收到此错误?在按钮单击事件中?在哪条线上?这听起来像是 DicomDirectory 对象的自定义内部错误,不管是什么。

【讨论】:

  • 什么是 DicomDirectory?这是您代码中的一行,还是第三方对象?
【解决方案2】:

fi 不会是本地的,它将是该类的全局。

你所拥有的将起作用。

【讨论】:

    【解决方案3】:

    fi 在所示函数之外声明,因此它应该在一个函数中具有类作用域而不是局部作用域。这意味着您应该能够在您的两个函数中使用它。这假设您展示的两个函数在同一个类中(例如“Form1”)。

    您可能还想发布包含这些函数的类声明,这将验证它们是否在同一个类中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2019-03-30
      • 2019-10-04
      相关资源
      最近更新 更多