Can't Code for Sure Ответов: 1

Вызов экземпляра из другого элемента управления WPF


Почему это не работает? У меня есть несколько программ, где мне нужно создать экземпляр из одной кнопки и читать из экземпляра при нажатии другой кнопки. Но я не могу получить доступ к методам и свойствам. Я понимаю, что это глупый вопрос новичка, но я действительно хочу знать, как это сделать :)

Большое спасибо

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace objektLaes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Objekt nytObjekt = new Objekt(); // declare Objekt
            nytObjekt.sætNavn(textBox1.Text);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Text = nytObjekt.hentNavn; // Can't access Objekt from here. Why not?
        }
    }
}


Что я уже пробовал:

Приведенный выше пример кода показывает, что я намеревался сделать/как я намеревался это сделать

1 Ответов

Рейтинг:
1

OriginalGriff

Посмотрите на свой код:

private void button1_Click(object sender, EventArgs e)
{
    Objekt nytObjekt = new Objekt(); // declare Objekt
    nytObjekt.sætNavn(textBox1.Text);

}
nytObjekt объявляется локальным по отношению к button1_Click метод, и разрушается, когда метод заканчивается.
Мы называем это "выходом за пределы области видимости" - когда переменная объявляется, она всегда доступна только в фигурных скобках вокруг кода, в котором она объявлена: таким образом, внутри метода она доступна только в этом методе и так далее.

Если вы хотите, чтобы он был доступен для других методов, он должен быть объявлен внутри класса, а не метода:

private Objekt nytObjekt = new Objekt();
private void button1_Click(object sender, EventArgs e)
{
    nytObjekt.sætNavn(textBox1.Text);
}

private void button2_Click(object sender, EventArgs e)
{
    textBox2.Text = nytObjekt.hentNavn;
}