表单应用程序中的作用域不正确



我正在开发一个表单应用程序,似乎误解了我的方法的范围。我有两个工作方法Split和AddToDatabase,我正试图从button1_click事件处理程序调用它们。然而,在处理程序中,Split()和AddToDatabase()以红色突出显示,表示它们在当前上下文中不存在。。。有人知道为什么会这样吗?感谢

namespace WindowsFormsApplication1
{
    class Content
    {
        public void Split()
        {
           //
        }
        public void AddToDatabase()
        {
           // 
        }
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void Browse_Click(object sender, EventArgs e)
        {
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK) // Test result.
            {
                string root = openFileDialog1.FileName;
            }
        }
        public void button1_Click(object sender, EventArgs e)
        {
            Split();
            AddtoDataBase();
        }
    }
}

这是因为它们在不同的类中。你需要这个:

var c = new Content();
c.Split();
c.AddToDatabase();

但这就引出了一个问题,即它们是否需要是实例方法。如果它们不存储任何状态,则将其设为static:

public static void Split() ...
public static void AddToDatabase() ...

然后这样称呼他们:

Content.Split();
Content.AddToDatabase();

它们不存在于该范围中,因为您已将它们放入另一个类(Content)中。在不知道为什么的情况下,我猜"答案是正确的,但您要么需要创建Content的实例,并在上调用SplitAddToDatabase,要么将方法移动到您的主窗体。

您需要使用Content类的instance进行访问,因为这些方法在不同的类Content 中声明

示例:

    Content c=new Content();
    c.Split();
    c.AddtoDataBase();

它们在Content类中定义,而不是在Form1类中定义

请尝试以下操作。

    public void button1_Click(object sender, EventArgs e)
    {
        var content = new Content();
        content.Split();
        content.AddtoDataBase();
    }

此外,您目前已经定义了Content类,但没有定义它是publicprivate等,因此它将默认为internal

最后,当你构建越来越多的代码时,你会发现在同一个文件中有多个类会让你很难找到你的方法。尝试将它们分为不同的文件,通常是Content.csForm1.cs

最新更新