登录表单并将标签页添加到主表单TabControl中

时间:2018-10-03 07:45:52

标签: c# winforms

我有3个表单,分别是Login_Form,Main_Form,并且还有一个始终显示datagridview的表单。

这是主要形式: Main Form

这是登录表单 Login Form

这是“显示用户数据”表单 Show User Data Form

这是登录按钮的点击代码:

private void button1_Click(object sender, EventArgs e)
{
    if(this.txtusername.Text =="" || this.txtpassword.Text =="")
    {
        this.lblserverstatus.Text = "Can not be null";
    }
    else
    {
        this.lblserverstatus.Text = "running login...";

        using (MySqlConnection conn = new MySqlConnection(connStr))
        {
            conn.Open();

            string query = "SELECT * FROM Table WHERE acc = '" + txtusername.Text + "' AND pw = '" + txtpassword.Text + "'";
            MySqlCommand cmd = new MySqlCommand(query, conn);
            MySqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    this.lblserverstatus.Text = "Login Successful";
                    UserName = txtusername.Text;
                    Password = txtpassword.Text;
                    DialogResult = DialogResult.OK;

                    this.Close();
                }
            }
            else
            {
                this.lblserverstatus.Text = "Login fail";
                DialogResult = DialogResult.No;
            }
        }
    }
}

这是Main_Form代码

public Main_Form()
{
    InitializeComponent();
    DialogResult result;
    using (var Login_Form = new Login_Form())
    {
        result = Login_Form.ShowDialog();
        if (result == DialogResult.OK)
        {
            var username = Login_Form.UserName;
            var password = Login_Form.Password;
            //this.lblpw.Text = password;
            //this.lblusername.Text = username;
            this.QueryLoginedUserData(username, password);
            MessageBox.Show(username + " Success Login");
            tabControl1.TabPages.Add(new main_tab(new user_data()));
        }
        else
        {
            result = DialogResult.No;
        }
    }
} 

当我启动程序时,它将运行Main_Form并调用Login_Form进行登录。但是,如果我在尚未关闭程序的情况下再次执行此操作。它无法将更多选项卡页添加到Main_Form选项卡控件中。在这种情况下我需要使用什么事件或可以做什么?

该程序的流程为:

运行程序->登录->在名为userID-> Main_Form的选项卡页上的datagridview中显示数据,再次单击其他用户登录->添加名为userID的选项卡并在datagridview的选项卡页上显示数据->再次

1 个答案:

答案 0 :(得分:0)

如我所见,您从标签所在的Login form呼叫Main form

如果是这种情况,那么这很简单。

public void AddTab()内添加一些代码,添加MainForm函数

public void AddTab(string passedData)
{
    MessageBox.Show("This is example.\nPassed data is: " + passedData + "\nThis function is ran on " + this.Text + " form");
    //Here write adding tab function
}

然后在Login表单中再创建一个Constructor,这需要您的MainForm类。通过时,您将可以访问public中的所有MainForm对象,并且由于我们创建了public void AddTab(string passedData),因此可以使用该功能。

public partial class YourLoginForm
{
    private MainForm mf;

    //This is standard constructor
    public YourLoginForm()
    {
        InitializeComponents();
    }

    //This is new constructor
    public YourLoginForm(MainForm form)
    {
        InitializeComponents();
        mf = form; //Setting our globally accessible variable (within this class) to reference of passed form (main form)
    }

    private void LoginButtonClick(object sender, EventArgs e)
    {
        mf.AddTab("I have passed this string"); //Accessing public void from main form.
    }
}