在代码的其他部分使用Structs,形成

时间:2015-04-26 14:47:05

标签: c# winforms struct

我有一个我已经声明了这个结构的类

public struct Tasks
{
    public string tName;
    public string tDate;
    public string tPriority;
    public string tDescription;
}

Form1中,我构建了

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Tasks[] entry=new Tasks[taskName.Length];
    }
}

这很好用,但是我想按一下按钮输入结构。

 private void TaskName1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2(entry[i].tDate, entry[i].tName, entry[i].tPriority);
     frm.Show();  
 }

它显然给出警告“名称”条目“在当前上下文中不存在”。

我对编程很新,但我花了几个小时尝试了很多事情都无济于事。

我试图找到方法以某种方式使entry[array]公开。 我已经创建了公共类并声明了struct并构造为public,但我仍然无法使其工作。

我想使用条目结构发送到另一个表单,因为这是我保存信息的地方,我将使用结构写入ext文件。

任何解决方案或更好的方法吗?

如何跨多个表单,类等使用结构?基本上任何地方。

2 个答案:

答案 0 :(得分:0)

将Tasks数组保存在表单的构造函数中。所以它只在构造函数的范围内可见。要使其对其他Form1成员可见,必须在Form1类的级别上声明它:

public partial class Form1 : Form
{
    Tasks[] entry;

    public Form1()
    {
        InitializeComponent();
        entry = new Tasks[taskName.Length];
    }
}

这只是为了使你的语法正确。您的方法是否值得追求是完全不同的问题,我强烈建议您阅读您的问题的评论。

答案 1 :(得分:0)

您试图在一个对此变量一无所知的方法中引用构造函数中声明的局部变量。 C#有一个名为" scope"的概念,其中变量声明只能由创建它们的代码块访问。即。如果在方法MyMethod()中声明变量,则只能在MyMethod()内部直接访问它。范围也可以嵌套,任何嵌套范围都可以访问父范围中的任何变量,反之亦然。例如:

class MyClass {
    int someInt = 0;

    void MyMethod() {
        int anotherInt = 5;
        someInt += 1;    // This works, as someInt was declared as a class-wide variable.
    }

    void AnotherMethod() {
        anotherInt = 6;    // Will not work!  anotherInt was declared in MyMethod, so is in a separate scope than that of AnotherMethod.

        string aString = "asd";


        if (someInt == 0) {    // Again, this works because this variable is declared in the parent scope.
            string anotherString = "fgh";
            aString = "asdasd";    // Works
        }

        anotherString = "oh no";    // Does not work, because if-statements create their own scope!
    }
}

基本上,每当你看到一个开口花括号({)时,你就会知道正在创建一个新的范围。

将声明移到Form1()构造函数之外,只需在构造函数中定义它。

public partial class Form1 : Form {
    Tasks[] entry;

    public Form1() {
        InitializeComponent();
        entry = new Tasks[taskName.Length];
    }
}

然后,您可以从Form1中的任何方法引用条目。

相关问题