我有3个表单,分别是Login_Form,Main_Form,并且还有一个始终显示datagridview的表单。
这是主要形式:
这是登录表单
这是“显示用户数据”表单
这是登录按钮的点击代码:
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的选项卡页上显示数据->再次
答案 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.
}
}