У меня две формы . В первой форме есть кнопка с текстом «Войти». Нажав эту кнопку , я открою другую форму, в которой я смогу войти в систему, используя имя пользователя и пароль. Затем есть кнопка «Продолжить», она проверит имя пользователя и пароль, а затем закроет вторую форму. Затем текст кнопки «Войти» в первой форме изменится на «Добро пожаловать» + имя пользователя.

Все работает нормально, но я не могу изменить текст кнопки в 1-й форме. Я понимаю, что мне нужно обновить Form1 после закрытия Form2 . Но я не смог этого сделать.

1
Pratik Saha 28 Дек 2015 в 10:35

2 ответа

Лучший ответ

Я бы сделал это так, у меня есть что-то на form2, которое записывает введенный мной текст.

public partial class Form2 : Form {
    public string InputText = ""; //use this to record whatever is inputed in the Form2 by the user
    //somewhere else in the code
    public void foo(){ //this may be closing event or button pressed event
        InputText = textBoxInForm2.Text; //record the input from `form2` textbox
        this.DialogResult = DialogResult.OK; //mark as ok
    }

    //This is exactly the foo above, but just in case you wonder how the event FormClosing look like:
    //Add this event handler on your Form2
    private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
        InputText = textBoxInForm2.Text; //record the input from `form2` textbox
        this.DialogResult = System.Windows.Forms.DialogResult.OK;
    }
}

Затем в вашем form1 вы можете открыть form2 с помощью ShowDialog. Затем, если диалоговое окно получится так, как вы хотите, примерно так:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        Form2 form2 = new Form2(); //this must be declared in form1
        if (form2.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
            textBoxInForm1.Text = form2.InputText; //grab the input text
        }
    }
}

Затем обновите textBoxInForm1 любым значением из form2

Изменить: в приведенном мной примере form2 создается в конструкции form1. Очевидно, это не всегда так. Но в этом примере подчеркивается, что для доступа form2 должен находиться в домене form1. В данном случае это объект, объявленный в его constructor. Вы можете разместить там, где ваш form2 будет создан по мере необходимости: как property класса Form1, внутри одного из методов Form1 и т. Д.

2
Ian 28 Дек 2015 в 08:21

Нет необходимости возвращать форму1.

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

0
Muhammed Naqi 20 Сен 2016 в 10:13