#c# #visual-studio
#c# #visual-studio
Вопрос:
Я хочу создать вторую форму «на лету» и отобразить результаты из переменных в основной форме в виде метки во второй форме. Пожалуйста, как мне это сделать? Спасибо
Ответ №1:
Я чувствую, что здесь есть несколько вопросов.
Как открыть новую форму: в каком-либо методе Form1
добавьте следующий код:
Form2 form2 = new Form2();
form2.ShowDialog();
Как передавать значения из Form1
в Form2
: передавайте их при вызове Form2
конструктора:
Form2 form2 = new Form2(String value, Boolean isDone);
И Form2
конструктор должен выглядеть следующим образом:
public Form2(String form1Value, Boolean form1IsDone) {
label1.Text = form1Value;
label2.Text = form1IsDone;
}
Ответ №2:
Form newForm = new Form();
TextBox tb = new TextBox();
tb.ReadOnly = true;
tb.Multiline = true;
tb.Dock = DockStyle.Fill;
tb.Text = "One and" Environment.NewLine "two lines of text";
newForm.Controls.Add(tb);
newForm.ShowDialog();
Замените TextBox
на Label
или как вам угодно.
Но если вам не нужно каждый раз динамически генерировать макет новой формы, вам действительно следует создать новую форму в Visual Studio designer и открыть эту форму, передав свойства содержимого этой форме.
Form2 form2 = new Form2();
form2.SetContent("One and" Environment.NewLine "two lines of text");
form2.ShowDialog();
где SetContent
— открытый метод, который вы создаете в Form2
классе. SetContent
Метод должен вводить текст соответствующих меток и т.д.
Комментарии:
1. ДА. Вы также могли бы передать содержимое и другую информацию конструктору формы и позволить форме решать, как создавать себя динамически, в зависимости от информации.
Ответ №3:
Вы можете сделать это следующим образом:
var form = new Form
{
Owner = this
};
var label = new Label
{
Text = "Hello"
};
form.Controls.Add(label);
form.Show();
Конечно, вам придется еще немного поработать над версткой, но это всего лишь пример того, «как это происходит».
Комментарии:
1. ShowDialog является модальным, что означает, что вы должны закрыть форму, прежде чем делать что-либо еще. Show не является, что означает, что вы можете использовать обе формы одновременно и намеренно переключать фокус между ними. Но в обоих случаях вы должны передать первую форму в качестве параметра, который указывает владельца формы. SecondForm.Show(первая форма);. Это гарантирует, что вторая форма всегда находится поверх первой и что она не может исчезнуть за первой, особенно если она меньше первой.
2. @OlivierJacot-Decombes Лучше настроить владельца на инициализацию. Я забыл это и исправил.
3. Вы устанавливаете владельца метки. Я говорю о настройке владельца вновь созданной формы.
4. @OlivierJacot-Decombes: Вы так правы, а я так слеп. 🙂 Я исправил это.