У меня вопрос ООП.У меня есть 3 класса.Программа (основной класс), форма входа и форма1.программа запускает логин, который проверяет аутентификацию, если это успешно, form1 запускается, пока логин закрывается.Теперь у меня проблема в том, что если мне нужно передать значение переменной в мою форму1?
Причина в том, что я хочу использовать логин в качестве переменной, передать его в мою форму1, которая затем запускает соответствующий код длявыполнять определенные вещи.
В основном администратор имел бы полный доступ к элементам управления, но обычный пользователь имел бы ограниченный доступ.
вот мой код, исключая мою форму1 (не нужна, если кто-то не хочет ее видеть).
namespace RepSalesNetAnalysis
{
public partial class LoginForm : Form
{
public bool letsGO = false;
public LoginForm()
{
InitializeComponent();
}
private static DataTable LookupUser(string Username)
{
const string connStr = "Server=server;" +
"Database=dbname;" +
"uid=user;" +
"pwd=*****;" +
"Connect Timeout=120;";
const string query = "Select password From dbo.UserTable (NOLOCK) Where UserName = @UserName";
DataTable result = new DataTable();
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = Username;
using (SqlDataReader dr = cmd.ExecuteReader())
{
result.Load(dr);
}
}
}
return result;
}
private void buttonLogin_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textUser.Text))
{
//Focus box before showing a message
textUser.Focus();
MessageBox.Show("Enter your username", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
//Focus again afterwards, sometimes people double click message boxes and select another control accidentally
textUser.Focus();
textPass.Clear();
return;
}
else if (string.IsNullOrEmpty(textPass.Text))
{
textPass.Focus();
MessageBox.Show("Enter your password", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
textPass.Focus();
return;
}
//OK they enter a user and pass, lets see if they can authenticate
using (DataTable dt = LookupUser(textUser.Text))
{
if (dt.Rows.Count == 0)
{
textUser.Focus();
MessageBox.Show("Invalid username.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
textUser.Focus();
textUser.Clear();
textPass.Clear();
return;
}
else
{
string dbPassword = Convert.ToString(dt.Rows[0]["Password"]);
string appPassword = Convert.ToString(textPass.Text); //we store the password as encrypted in the DB
Console.WriteLine(string.Compare(dbPassword, appPassword));
if (string.Compare(dbPassword, appPassword) == 0)
{
DialogResult = DialogResult.OK;
this.Close();
}
else
{
//You may want to use the same error message so they can't tell which field they got wrong
textPass.Focus();
MessageBox.Show("Invalid Password", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
textPass.Focus();
textPass.Clear();
return;
}
}
}
}
private void emailSteve_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("mailto:stevesmith@shaftec.co.uk");
}
}
и вот мой основной класс
namespace RepSalesNetAnalysis
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new LoginForm());
LoginForm fLogin = new LoginForm();
if (fLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new Form1());
}
else
{
Application.Exit();
}
}
}
}
Итак, чтобы подвести итог, мне нужно передать значение из моего класса входа в мой класс form1, чтобы я мог использовать условие внутри form1, чтобы ограничитьвзаимодействие с пользователем.