Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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#_Class_Object_Button - Fatal编程技术网

C# 从另一个按钮单击事件访问对象

C# 从另一个按钮单击事件访问对象,c#,class,object,button,C#,Class,Object,Button,我对C#还相当陌生,所以这实际上可能很简单,尽管我花了几个小时在没有解决方案的情况下搜索 我正在使用windows窗体,试图从另一个按钮单击事件访问对象。我得到的错误是“当前上下文中不存在名称‘object’”,当尝试在按钮2中访问对象时 public void Button1_Click(object sender, EventArgs e) { // Prefilled with a persons info MyClass object =

我对C#还相当陌生,所以这实际上可能很简单,尽管我花了几个小时在没有解决方案的情况下搜索

我正在使用windows窗体,试图从另一个按钮单击事件访问对象。我得到的错误是“当前上下文中不存在名称‘object’”,当尝试在按钮2中访问对象时

    public void Button1_Click(object sender, EventArgs e)
    {
        // Prefilled with a persons info
        MyClass object = new MyClass();
    }

    public void Button2_Click(object sender, EventArgs e)
    {
        // Access object
        string name = object.Name;
    }

因此,我的问题是如何访问在另一个“按钮单击”中创建的对象?

对象的范围应为类级别,以便同一类中的其他方法使用:

private MyClass _myClassObject; // class level object. Remember "object" is reserved keyword that is why renamed it to "_myClassObject"
public void Button1_Click(object sender, EventArgs e)
{
        // Prefilled with a persons info
        _myClassObject = new MyClass();
}

public void Button2_Click(object sender, EventArgs e)
{
    // Access object
    string name = _myClassObject.Name;
}

存在两个问题

  • 不能将
    对象
    用作变量名。(
    对象
    是保留关键字)
  • 无法在其他事件中访问内部变量
  • 为了解决这个问题,您需要在创建初始对象时确定变量的范围

    public class Example
    {
         // Variable declared as a class global.
         private readonly Sample sample; 
    
         // Constructor to build our sample.
         public Example() => sample = new Sample(); 
    
         // Button writing a property from sample.
         protected void btnSend(object sender, EventArgs e) => Console.WriteLine(sample.SomeProperty); 
    }
    
    因此,对象位于类的上部,当您构建示例时,始终会创建一个示例。因此,当您在
    Example
    类中使用
    Sample
    时,它的范围将正确


    我也不明白为什么你必须点击一个按钮来填充这个对象,所以我改为在创建了
    Example
    之后构建这个对象

    您已经在函数作用域中定义了对象,以便在执行函数代码后对其进行垃圾收集。您可能希望在类范围中定义它。更多信息c#6语法可能会让刚刚开始使用c#@Camilotervin的人感到困惑。公平地说,我经常使用速记。这是我的第二天性。