Получение значений из двух или более форм C#

Хорошо, после успешного входа в систему в окне предупреждения будет отображаться имя пользователя, а затем появится другая форма, позволяющая пользователю изменить свой пароль. Я хочу использовать значение имени пользователя (из формы входа) в условном выражении, чтобы иметь возможность изменить пароль.

Как получить это значение из другой формы? Спасибо.

Посмотреть изображение здесь: http://i49.tinypic.com/11r7zw8.png


person Cant Handle Me Babe    schedule 16.07.2012    source источник
comment
Один из способов сделать это — использовать общедоступное свойство в форме входа для имени пользователя, к которому вы можете получить доступ в другой форме.   -  person Adil    schedule 16.07.2012


Ответы (4)


Что вас смущает? Передайте имя пользователя следующей форме, я не вижу причин, по которым третья форма должна знать о какой-либо другой. Это была бы еще одна бесполезная зависимость.

person Artiom    schedule 16.07.2012
comment
зависит от того, как вы показываете 3-ю форму. Покажите нам внутреннюю логику. Но в целом должно быть так (я полагаю): Если авторизация прошла успешно, вы открываете диалог приветствия. Чем вы открываете 3-ю форму, верно? Создайте там свойство с именем UserName (или создайте конструктор с параметром имени пользователя). Может быть есть какие-то нюансы, которых я не знаю. Дайте мне знать, чтобы быть более конкретным в этом случае - person Artiom; 16.07.2012
comment
Я попробовал это. Ошибки нет, но значение не отображается. msdn.microsoft.com/en-us/library /f6525896(v=vs.90).aspx - person Cant Handle Me Babe; 16.07.2012
comment
Плохая практика — устанавливать общедоступные модификаторы для элементов управления. Часто это означает проблемы в вашей архитектуре. Как я уже сказал, используйте свойство или конструктор для этого случая. Вот пример, который я сделал для вас. Загрузить - person Artiom; 16.07.2012
comment
@Артем Спасибо большое. Работает ли это с двумя или более значениями, которые нужно передать? - person Cant Handle Me Babe; 17.07.2012
comment
@CantHandleMeBabe, конечно, все зависит от вашего воображения. - person Artiom; 17.07.2012

Один из способов сделать это — использовать общедоступное свойство в форме входа для имени пользователя, к которому вы можете получить доступ в другой форме.

Например:

Внутри LoginForm создайте общедоступное свойство

public string UserName { get; private set;}

Заполните это свойство в LoginForm и передайте его в другую форму. Во время создания объекта второй формы вы можете получить доступ к данным из первой формы, а затем передать их свойству/конструктору другой формы.

Например,

FacultyForm facultyForm=new FacultyForm();
facultyForm.UserName = loginForm.UserName; //in this case you have to create a property in other form too. 

Это всего лишь один из способов сделать это.

Это решает проблему?

Другой способ сделать это — использовать Delegate/Events.

person Adil    schedule 16.07.2012
comment
Только что нашел относительно похожий пост, а также stackoverflow. com/questions/3552169/ - person Adil; 16.07.2012
comment
Как мне передать его в другую форму? - person Cant Handle Me Babe; 16.07.2012
comment
Во время создания объекта второй формы вы можете получить доступ к данным из первой формы, а затем передать их свойству/конструктору другой формы. Например, ФакультетФормафакультетФорма=новая ФакультетФорма(); ФакультетФорма.ИмяПользователя = Форма входа.ИмяПользователя; // в этом случае вы должны создать свойство и в другой форме. Это всего лишь один из способов сделать это. - person Adil; 16.07.2012

Сделайте текстовое поле UserName формы входа общедоступным, чтобы вы могли получить доступ из любой другой формы.

Вы можете изменить код в LoginForm.designer.cs

person Kishore Kumar    schedule 16.07.2012
comment
общественный контроль - плохая привычка. Лучше избегать этого. Кстати - нет причин делать это - person Artiom; 16.07.2012

Вы можете создать Пользовательское событие, которое будет возникать при успешном входе в систему. может передавать информацию с помощью CustomEventArgs, а затем использовать ее при запуске 2-я форма.

Что-то вроде этого:

Форма1

public partial class Form1 : Form
{

    Logon logon;
    PasswordChange pass;

    public Form1()
    {
        InitializeComponent();

        logon = new Logon();
        logon.raiseLoginEvent += new Logon.LoginSuccesful(logon_raiseLoginEvent);
        logon.ShowDialog();

    }

    void logon_raiseLoginEvent(object sender, LoginEventArgs e)
    {
        pass = new PasswordChange();
        pass.LoginName = e.Login;
        pass.ShowDialog();
    }


}

Войти

public partial class Logon : Form
{
    public delegate void LoginSuccesful(object sender, LoginEventArgs e);
    public event LoginSuccesful raiseLoginEvent;

    public Logon()
    {
        InitializeComponent();
    }


    private void Logon_FormClosing(object sender, FormClosingEventArgs e)
    {
        LoginEventArgs ev = new LoginEventArgs("Admin");
        raiseLoginEvent(this, ev);
    }
}

public class LoginEventArgs : EventArgs
{
    public LoginEventArgs(string s)
    {
        loginName = s;
    }
    private string loginName;
    public string Login
    {
        get { return loginName; }
        set { loginName = value; }
    } 
}

Смена пароля

public partial class PasswordChange : Form
{
    public PasswordChange()
    {
        InitializeComponent();
    }

    public string LoginName
    {
        get {return  textBox1.Text; }
        set { textBox1.Text = value; }
    }

}
person Mark Hall    schedule 16.07.2012