Как очистить или восстановить форму окна после отправки с помощью c #? - PullRequest
4 голосов
/ 23 мая 2011

Я использую форму окна записи студента. Я хочу, чтобы после отправки данных все поля формы (т. Е. Переключатель, поле со списком и т. Д.) И сообщения (предупреждение и успешно) были сброшены, чтобы новый пользователь мог добавить данные.

  • это какая-нибудь встроенная функция сброса формы в csharp?
  • или я должен написать понятный метод для этого?
  • или я могу восстановить форму?

Ответы [ 7 ]

11 голосов
/ 12 апреля 2012
this.Controls.Clear();

this.InitializeComponent();
2 голосов
/ 23 мая 2011

Этого можно достичь двумя способами: -

1) вы можете очистить поля формы одним способом.say public void clear() И всякий раз, когда вы хотите очистить форму, просто вызовите этот метод.

2) Вторым способом вы можете уничтожить экземпляр формы и сгенерировать новый экземпляр той же формы, а затем показать это.

Я порекомендую 1-й для вас.

Это то, что я использовал для создания на каждой моей странице

private void ClearControls()
{
    try
    {
        txtUserName.Text = string.Empty;
        //txtPassword.Text = string.Empty;
        txtFName.Text = string.Empty;
        txtMName.Text = string.Empty;
        txtLName.Text = string.Empty;
        lblUserType.Text = string.Empty;
    btnSave.Text = "Save";
    fnMessage(false, "");
}
catch (Exception ex)
{
    fnMessage(true, ex.Message);
}

}

Спасибо

1 голос
/ 23 мая 2011

Вы можете либо заново создать экземпляр формы, либо, возможно, попробовать что-то похожее на это (не проверено):

        foreach (Control ctl in this.Controls)
        {
            switch (ctl.GetType().ToString())
            {
                case "TextBox":
                    ctl.Text = null;
                    break;
                case "ComboBox":
                    ctl.Text = null;
                    break;
            }
        }

Ясно, что вы можете включить столько разных типов элементов управления, сколько пожелаете, и ввести другие критерии (т. Е. Когда имя элемента управления начинается с «xyz» или где элемент управления находится на определенной панели).

По сравнению с другими предложениями, преимущество этого подхода состоит в том, что если у вас есть десятки одного и того же типа элемента управления (обычно текстовые поля), несколько строк кода покрывают много. Кроме того, если вы добавите больше элементов управления для охватываемых типов, вам не нужно повторно посещать код для его обновления. Возможно, вы могли бы даже создать его как метод расширения ваших форм?

1 голос
/ 23 мая 2011
  1. Реализация привязки данных к данному объекту ( хорошая начальная точка здесь )
  2. Для сброса формы создайте новый объект, и привязка сделает это за вас.

HTH

0 голосов
/ 16 мая 2013

Так как у меня была та же проблема, и у моего был вложенный элемент управления.Я попробовал метод CJM, и он сработал, однако мне пришлось написать рекурсивную функцию из-за вложенности элементов управления (элементы управления вкладками, контейнеры, пользовательские элементы управления и т. Д.)

Попробуйте следующий фрагмент, если вы хотите рекурсивно очистить всю форму

    private void clearRecursive(Control control)
    {
        foreach (Control subcontrol in control.Controls)
        {
            switch (subcontrol.GetType().ToString().Replace("System.Windows.Forms.", ""))
            {
                case "TextBox":
                    TextBox textBox = (TextBox)subcontrol;
                    textBox.Text = null;
                    break;

                case "ComboBox":
                    ComboBox comboBox = (ComboBox)subcontrol;
                    if (comboBox.Items.Count > 0)
                        comboBox.SelectedIndex = 0;
                    break;

                case "CheckBox":
                    CheckBox checkBox = (CheckBox)subcontrol;
                    checkBox.Checked = false;
                    break;

                case "RadioButton":
                    RadioButton radioButton = (RadioButton)subcontrol;
                    radioButton.Checked = false;
                    break;

                case "TreeView":
                    TreeView tv = (TreeView)subcontrol;
                    foreach (TreeNode node in tv.Nodes)
                    {
                        node.Checked = false;
                        CheckChildren(node, false);
                    }
                    break;

                case "ListBox":
                    ListBox listBox = (ListBox)subcontrol;
                    listBox.Items.Clear();
                    break;

                case "CheckedListBox":
                    CheckedListBox chklstbox = (CheckedListBox)subcontrol;
                    for (int i = 0; i < chklstbox.Items.Count; i++)
                    {
                        chklstbox.SetItemCheckState(i, CheckState.Unchecked);
                    }
                    break;
            }

            if (subcontrol.HasChildren)
                clearRecursive(subcontrol);
        }

    }
0 голосов
/ 23 мая 2011

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

0 голосов
/ 23 мая 2011

вызов InitializeComponent метод и Form_Load метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...