Member 12496235 Ответов: 2

Заполнение класса из текстового поля C#


Всем привет . Я пытаюсь заполнить класс данными и использовать эти данные в любом другом месте программы, где они мне понадобятся.

Я создал этот класс
public class id
{

private string name; // field

public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}

И в form_name я попытался заполнить класс таким образом:
private void Button_Click(object sender, RoutedEventArgs e)
{
id IDOBJE = new id();
{
IDOBJE.Name = txtshenimi.Text;
}
this.Close();
}
}


Но я не;т получить никакого результата. Не мог бы кто-нибудь помочь мне прояснить это, потому что я новичок в ООП и не знаю так много о классах и объектах.

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

И в другой форме я попытался получить такие данные:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
id idobje = new id();
txtrez.Text = idobje.Name;
}

2 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что когда вы создаете свой id экземпляр в обработчике щелчка-это локальная переменная, которая его содержит:

private void Button_Click(object sender, RoutedEventArgs e)
   {
   id IDOBJE = new id();
   ...
   }
Поэтому в конце метода он отбрасывается - как и все локальные переменные.
Хуже того, вы тогда закроете форму!

Вместо того чтобы пытаться создать новый экземпляр, используйте текущий и создайте свойство в своей форме, которое позволит внешнему миру получить к нему доступ.
        public class id
            {
            public string Name { get; set; }
            }
...
        public id Id { get; private set; } = new id();
        private void Button_Click(object sender, EventArgs e)
            {
            Id.Name = txtshenimi.Text;
            this.Close();
            }
Затем, когда ваша форма закрывается, вызывающий код - предполагая, что он использовал ShowDialog для отображения формы - может получить доступ к id по мере необходимости.


[no name]

Мой друг, что представляет собой этот код, потому что он немного сбивает с толку ?
идентификатор публичного класса
{
public string Name { get; set; }
}
...
идентификатор публичных идентификатор { получить; личное набор; } = новый идентификатор();

OriginalGriff

Он объявляет Name как публичное строковое свойство класса id и автоматически предоставляет резервное поле (оно такое же, как и ваша версия, но проще и легче читается - нет необходимости в строке:

наименование частная строку ;

поскольку система обрабатывает поле для вас автоматически.

"..." называется многоточием и указывает на то, что между двумя связанными фрагментами, которые я вам показываю, может быть другой код - ваш. Вы не вводите "..." в свое приложение!

Затем он объявляет свойство public id, называемое Id, которое может быть изменено только изнутри класса (поскольку сеттер является частным, он не может быть доступен извне формы, только геттер может). Он автоматически создает новый экземпляр класса id при создании формы и присваивает его свойству.

Рейтинг:
1

Maciej Los

Взгляните на свой код:

//form 1
private void Button_Click(object sender, RoutedEventArgs e)
{
id IDOBJE = new id();
...//skiped lines
}

//form 2
private void Button_Click(object sender, RoutedEventArgs e)
{
id IDOBJE = new id();
...//skiped lines
}

Каждый раз, когда вы создаете новый экземпляр id класс - уровень области действия: метод.

Я бы посоветовал почитать о: Область действия переменных в C# - GeeksforGeeks[^]

Если вы хотите создать один экземпляр класса id и использовать его в каждом окне вашего приложения, вы должны объявить переменную в Program класс или в вашем пользовательском статическом классе (вы должны добавить его раньше):
static class MyHelper
{
    public static id SingleId;
}


Окончательно:
//write 
MyHelper.SingleId = new id();
MyHelper.SingleId.Name = txtshenimi.Text;

//read
id sid = MyHelper.SingeId;
txtshenimi.Text = sid.Name;


Для получения более подробной информации, пожалуйста, смотрите: Модификаторы Доступа - Руководство По Программированию На C# | Microsoft Docs[^]

Я бы предложил начать с основ: Учебные Пособия По C# | Microsoft Docs[^]

Кажется, вы создали приложение WPF (я вижу RoutedEventArgs в случае щелчка). Обратите внимание, что WPF-это не то же самое, что WinForm! Видеть: WPF vs. WinForms - полный учебник по WPF[^] Не смешивайте их!