Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误消息";非静态字段、方法或属性需要对象引用。”;_C#_Forms_Compiler Errors_Static - Fatal编程技术网

C# 错误消息";非静态字段、方法或属性需要对象引用。”;

C# 错误消息";非静态字段、方法或属性需要对象引用。”;,c#,forms,compiler-errors,static,C#,Forms,Compiler Errors,Static,我正在创建一个访问数据库的程序 给我带来麻烦的代码是当按下按钮时打开一个新表单。然后,它根据主窗体上列表框中的选定值获取数据,并需要将该数据发送到第二个窗体,以放置在文本框和标签中 我的问题是,为了让代码在不抛出错误的情况下执行 非静态字段、方法或属性需要对象引用 我必须使第二种形式的方法是静态的;但是,这会阻止我访问辅助窗体上的控件 主窗体代码段: private void MemView_Click(object sender, EventArgs e) { str

我正在创建一个访问数据库的程序

给我带来麻烦的代码是当按下按钮时打开一个新表单。然后,它根据主窗体上列表框中的选定值获取数据,并需要将该数据发送到第二个窗体,以放置在文本框和标签中

我的问题是,为了让代码在不抛出错误的情况下执行

非静态字段、方法或属性需要对象引用

我必须使第二种形式的方法是静态的;但是,这会阻止我访问辅助窗体上的控件

主窗体代码段:

 private void MemView_Click(object sender, EventArgs e)
    {
        string selected = lstMember.SelectedItems[0].Text;
        //MessageBox.Show(selected);
        string[] data = P.selectMem(selected);
        MessageBox.Show(data[0]);

        MemForm mem = new MemForm(); //How to open a designed form

        mem.Show();  //Displays the addmem form

        MemForm.getData(data);

    }
public void getData(string[] Data)
    {
        int index = 0;
        bool loop = false;
        string text;

        while (loop == true)
        {
            if (index < 10)
            { text = "tb0" + index.ToString(); }
            else
            { text = "tb" + index.ToString(); }

            index = index + 1;
        }


    }
辅助表单代码段:

 private void MemView_Click(object sender, EventArgs e)
    {
        string selected = lstMember.SelectedItems[0].Text;
        //MessageBox.Show(selected);
        string[] data = P.selectMem(selected);
        MessageBox.Show(data[0]);

        MemForm mem = new MemForm(); //How to open a designed form

        mem.Show();  //Displays the addmem form

        MemForm.getData(data);

    }
public void getData(string[] Data)
    {
        int index = 0;
        bool loop = false;
        string text;

        while (loop == true)
        {
            if (index < 10)
            { text = "tb0" + index.ToString(); }
            else
            { text = "tb" + index.ToString(); }

            index = index + 1;
        }


    }
public void getData(字符串[]数据)
{
int指数=0;
布尔循环=假;
字符串文本;
while(循环==true)
{
如果(指数<10)
{text=“tb0”+index.ToString();}
其他的
{text=“tb”+index.ToString();}
指数=指数+1;
}
}
我的第二个代码片段旨在使用循环将所有数据填充到文本框中,而无需手动写出每个tb00。Text=data[]等。 我无法访问C#中的FindControl()方法,很可能是因为需要静态方法。 主窗体中使用的P类执行SQL代码,并且工作正常

我已经尽力提供足够的信息来回答问题,但是如果需要更多的信息,只需在评论中提问,我会尝试提供更多信息。:)

如果
getData()
MemForm
中的非静态方法,则需要
MemForm
的实例才能使用它。您有一个:
memformmem=newmemform()
使用
mem
对象,该对象是
MemForm
的实例

mem.getData(data);

这不是默认的字符串类型问题吗?如果更改
字符串文本怎么办
to
string text=string.Empty?您正在以静态类方法调用该方法。将其作为实例方法调用:
mem.getData(data)。可能会有后续问题,但要一步一个脚印地去做。@Phil P。这并不能解决问题,我希望事情能这么简单。错误是由于GetData()方法不是静态的,但是如果我将该方法更改为静态方法,我将无法再访问MemForm上的控件。谢谢您和@J.Steen,这就是问题所在。代表我犯了一个愚蠢的错误:)