Невозможно открыть форму после использования this.Hide (); или this.Close (); - PullRequest
0 голосов
/ 13 июня 2019

Я пишу немного кода, который использует поведение AfterSelect из TreeView, чтобы затем открыть форму, используя выбранное имя узла и тег. Он работает отлично, однако недостаток заключается в том, что всякий раз, когда форма закрывается с помощью this.Close(); или this.Hide(); или даже с помощью встроенной кнопки закрытия Windows, я не могу открыть ту же форму, не открыв сначала другую.

Я пытался использовать различные методы поведения, такие как 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, а затем закончить детали, нажать отправить / закрыть, а затем при необходимости снова открыть ту же форму, однако я не могу повторно открыть эту форму, пока не открою другую первую такие как User Maintenance.

Нет сообщений об ошибках.

1 Ответ

0 голосов
/ 13 июня 2019

Вам действительно нужна эта часть кода:

var type = Type.GetType(namespaceName + "." + formName);
var newForm = Activator.CreateInstance(type) as Form;

Если нет, вам нужно подумать: если вы объявите переменную в каждом последующем выборе как новую форму, вы не сможете получитьСформируйте его обратно в старое состояние, когда вы его скрываете, потому что вы создаете новый экземпляр.

Если вы всегда хотите новый экземпляр этого окна, выполните:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...