我正在编写一些代码,该代码使用TreeView中的AfterSelect行为,然后使用所选的Nodes名称和标记打开一个表单。它可以完美地工作,但是缺点是,无论何时使用this.Close();
或this.Hide();
或什至使用内置的Windows关闭按钮关闭表单,我都必须先打开另一个表单才能重新打开同一表单。 / p>
我尝试使用不同的行为方法,例如NodeMouseClick
和NodeMouseDoubleClick
,但这仍然会导致对象错误,因此我认为这不是我需要的方法
这是我在树状视图中的代码:
public void TreeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
string formName = treeView1.SelectedNode.Name.ToString();
string namespaceName = treeView1.SelectedNode.Tag.ToString();
var type = Type.GetType(namespaceName + "." + formName);
var newForm = Activator.CreateInstance(type) as Form;
if (newForm != null)
{
newForm.ShowDialog();
}
}
这是表单中的代码:
private void BtnSave_Click(object sender, EventArgs e)
{
AccessDBConnection.sql = "INSERT INTO Users (FirstName, Surname, Username) values(@FirstName, @Surname, @Username)";
AccessDBConnection.cmd.Parameters.Clear();
AccessDBConnection.cmd.CommandType = CommandType.Text;
AccessDBConnection.cmd.CommandText = AccessDBConnection.sql;
AccessDBConnection.cmd.Parameters.AddWithValue("@FirstName", firstNameBox.Text);
AccessDBConnection.cmd.Parameters.AddWithValue("@Surname", surnameBox.Text);
AccessDBConnection.cmd.Parameters.AddWithValue("@Username", usernameBox.Text);
AccessDBConnection.openConnection();
AccessDBConnection.cmd.ExecuteNonQuery();
AccessDBConnection.closedConnection();
MyMessageBox.ShowMessage("User Created.", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
//this.Hide();
//this.Close();
//Commented out as using Windows Close Button for testing.
}
我应该能够打开表格Add User
,然后完成详细信息,按Submit / close,然后如果需要再次访问同一表格,但是在打开之前,我无法重新打开同一表格另一个第一,例如User Maintenance
。
没有错误消息。
答案 0 :(得分:0)
您真的需要代码的这一部分吗?
var type = Type.GetType(namespaceName + "." + formName);
var newForm = Activator.CreateInstance(type) as Form;
如果没有,则需要考虑一下,如果在每个afterselect中将var声明为新Form,则在隐藏它时就无法将其恢复为旧状态,因为创建了新实例。 / p>
如果您始终想要此窗口的新实例,请执行以下操作:
public void TreeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
string formName = treeView1.SelectedNode.Name.ToString();
string namespaceName = treeView1.SelectedNode.Tag.ToString();
var newForm = new FORMNAME();
newForm.ShowDialog();
}
以及另一种形式:
Close(); // this. is redundant
如果您只想隐藏它而不总是将其声明为新实例: 声明
var newForm = new FORMNAME();
在其他地方并以其他形式使用:
Hide();