Редактировать:
Вы дали немного больше разъяснений в своем вопросе, поэтому я постараюсь ответить на него.
В основной форме сделайтеВаш код делает что-то вроде этого:
private AuthenticateUser storedAuth; // shared data...
private void btnLogin_Click(object sender, EventArgs e)
{
AuthorizeWindow authWindow = new AuthorizeWindow();
authWindow.ShowDialog();
storedAuth = authWindow.Result; // Get the auth result back...
}
В AuthorizeWindow
создайте свойство результата и установите его, когда вы нажмете ОК и заполните все данные:
public AuthenticateUser Result { get; set; }
private void btnAuthenticate_Click(object sender, EventArgs e)
{
if (txtUserName.Text == string.Empty || txtPassword.Text == string.Empty)
{
MessageBox.Show("Please fill both information first.");
}
else
{
// Don't try to call the other window here, just set the result and close...
Result = new AuthenticateUser();
Result.UserName = txtUserName.Text;
Result.Password = txtPassword.Text;
Close();
}
}
Затем в главной форме, когда вы создаете и открываете AddEntryWindow
, передаете ему аутентификацию, которую вы сохранили:
private void btnAdd_Click(object sender, EventArgs e)
{
AddEntryWindow addWindow =
new AddEntryWindow(storedAuth.User, storedAuth.Password);
addWindow.ShowDialog();
}
Но, к сожалению, я создал небольшую ошибку здесь.Сначала мы должны проверить, прошли ли они аутентификацию:
private void btnAdd_Click(object sender, EventArgs e)
{
if(storedAuth == null)
{
MessageBox.Show("You must log in before you add an entry");
}
else
{
AddEntryWindow addWindow =
new AddEntryWindow(storedAuth.User, storedAuth.Password);
addWindow.ShowDialog();
}
}
Кроме того, я обнаружил небольшую ошибку в вашем коде AddEntryWindow
.Убедитесь, что все конструкторы для всех ваших окон всегда вызывают InitializeComponent
.В этом случае отредактируйте конструктор, который использует имя пользователя и пароль, чтобы вызвать конструктор по умолчанию, как ваш другой конструктор, который принимает MainWindow
:
public AddEntryWindow(string user, string pass)
: this() // important!
{
this.user = user;
this.pass = pass;
}
Перед редактированием:
Я не совсем понимаю ваш пример кода.Было бы проще, если бы вы создали новые примеры кода, чтобы добавить к вашему вопросу.
Вот что я понял из того, что вы сказали:
public class Authorize
{
public string Username { get; set; }
public string Password { get; set; }
}
public class Add
{
public void Login()
{
Authorize authorize = new Authorize();
authorize.Username = usernameTextBox.Text;
authorize.Password = passwordTextBox.Text;
// Todo: Rest of login logic here
}
// Todo: Other code here...
}
public class Display
{
public void Show()
{
Authorize authorize = new Authorize();
// uh oh, Username and Password are null!
}
// Todo: Other code here...
}
Решение
Самый простой способ сделать это - передать экземпляр Authorize
методу Show
(или как вы его на самом деле вызываете) в вашем классе Display
.Просто примите экземпляр Authorize
в качестве аргумента этого метода:
public class Display
{
public void Show(Authorize authorize)
{
// Now we have the values that the Login method created...
}
// ...
}
public class Add
{
public void Login()
{
Authorize authorize = new Authorize();
authorize.Username = usernameTextBox.Text;
authorize.Password = passwordTextBox.Text;
display.Show(authorize);
}
// ...
}