C# как получить значение из другого класса? - PullRequest
0 голосов
/ 07 мая 2020

Это мой Main.xaml.cs

private void Button_Click(object sender, RoutedEventArgs e)
{

    User u = new User();
    u.id = 1;
    u.access = 2;
    u.username = "USER1";

}

Это User.cs

class User
{
    public int id;
    public int access;
    public string username;

    public int ID
    {
        get { return id; }
        set { id = value; }
    }

    public int Access
    {
        get { return access; }
        set { access = value; }
    }

    public string Username
    {
        get { return username; }
        set { username = value; }
    }

}

Цель:

У меня создал еще одну кнопку в Main.xaml.cs:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    User u = new User();
    MessageBox.Show(u.Username.ToString());
}

Я стремлюсь получить значение из User.cs, которое я ранее назначил другой кнопке. Button_Click.

Как я могу показать окно сообщений со значениями, присвоенными User.cs?

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

В вашем коде вы создаете 2 разных объекта.

Попробуйте так:

User _user = new User();

private void Button_Click(object sender, RoutedEventArgs e)
{

    _user.id = 1;
    _user.access = 2;
    _user.username = "USER1";

}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    MessageBox.Show(_user.Username);
}
1 голос
/ 07 мая 2020

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

class Main
 {
 private User user;

private void Button_Click(object sender, RoutedEventArgs e)
{

    user = new User();
    user.id = 1;
    user.access = 2;
    user.username = "USER1";

}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    if(user == null)
     {
      MessageBox.Show("create user first");
      }
     else
     {
    MessageBox.Show(user.Username.ToString());
    }
}
}

Теперь оба метода будут использовать один и тот же экземпляр вашего класса User.

Кстати, вы можете использовать свойства auto в своем user класс. Легче вводить и меньше подвержено ошибкам:

class User
 {
 public int ID {get; set; }
 public int Access {get;set;}
 public string Username {get;set;}
 }
0 голосов
/ 07 мая 2020

Причина в том, что вы создаете объект в области видимости Button_Click,
, который затем недоступен для внешних областей.

Чтобы решить проблему, вы можете просто переместить объявление объекта User снаружи,
и в методах встречи просто присвойте им значения.

Вот решение, основанное на вашем коде:

using System;


class User
{
    public int id;
    public int access;
    public string username;

    public int ID
    {
        get { return id; }
        set { id = value; }
    }

    public int Access
    {
        get { return access; }
        set { access = value; }
    }

    public string Username
    {
        get { return username; }
        set { username = value; }
    }
}

public class Program
{
    User u; // Moved the object outside the method.

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        u = new User(); // Assigned value
        u.id = 1;
        u.access = 2;
        u.username = "USER1";
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        // User u = new User(); //  No need of this
        MessageBox.Show(u.Username.ToString());
    }

    public static void Main()
    {
        Console.WriteLine("Hello World");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...