Я создаю приложение, в котором пользователь будет нажимать кнопку в форме1, что вызовет отображение формы2. Затем пользователь заполнит чат в форме2, а затем нажмите кнопку, которая закроет форму2 и отправит обратно параметры form1 для обработки. Как это сделать на C#? Я видел людей, использующих свойства для этого, но примеры недостаточно ясны. Может ли кто-нибудь дать примерный код, показывающий мне, как я могу передать параметры? Я бы предпочел метод свойств, но до тех пор, пока он работает, я буду считать его ответом.Передача параметров вперед и назад между формами в C#
ответ
Проще говоря, поместите свои элементы формы во вторую форму, как обычно. Затем вы можете добавить публичных аксессуаров к этой форме, которые вы можете извлечь из ссылки и ссылки. Например, если Form2 имеет текстовые поля, которые вы хотели отступить, вы можете:
class Form2
{
// Form2.designer.cs
private TextBox TextBox1;
// Form2.cs
public String TextBoxValue // retrieving a value from
{
get
{
return this.TextBox1.Text;
}
}
public Form2(String InitialTextBoxValue) // passing value to
{
IntiializeComponent();
this.TextBox1.Text = InitialTextBoxValue;
}
}
Затем просто получить доступ к нему позже, когда вы создаете форму (очень как OpenFileDialog делает для Имя файла и т.д.
public void Button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2("Bob"); // Start with "Bob"
form2.ShowDialog(); // Dialog opens and user enters "John" and closes it
MessageBox.Show(form2.TextBoxValue); // now the value is "John"
}
То же самое можно сделать для Int32, Boolean, и т.д. Все зависит от величины формы, а если вы хотите, чтобы бросить/проверить его, или в противном случае.
Alternativly, вы можете играть с Modifiers
собственности в конструктор форм, в котором вы можете сделать он доступен снаружи. Я лично рекомендую использовать аксессор, чтобы вы могли проверить и подтвердить возвращенные результаты, а не просто сбросить значение (так как эта логика обычно находится в самой форме, а не в каждом случае, который вы хотите вызвать/использовать Form2)
Здесь как я хотел бы передать параметр (ы), чтобы и обратно из другого вида:
При условии, следующий вид конструкции для Form1 и Form2:
в этом примере «txtBoxForm1» текстовое поле на Form1 передается в Form2, где он используется для инициализации текстового поля txtBoxForm2. Form2. После того, как пользователь взаимодействует с Form2 и заканчивает его, нажав кнопку [Return to Form1], значение текстового поля txtBoxForm2 будет присвоено параметру, который возвращается (по ссылке) в текстовое поле «txtBoxForm1» в Form1.
Кодирование это делается в два простых шага:
шаг 1) В Form1, передают параметр (ей) Form2 путем перегрузки метода ShowDialog():
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSend_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
//Step 1)
//Display the form passing parameter(s) via overloading
//the ShowDialog() method.
//In this example the parameter is the 'txtBoxForm1' on Form1.
// f2.ShowDialog(); is replaced by
f2.ShowDialog(ref txtBoxForm1);
}
}
В приведенном выше описании код, параметр - это текстовое поле 'txtBoxForm1', которое передается по ссылке. Передача его по ссылке - это то, почему он не только передает значение текстового поля в Form2, но также может принимать и отображать на Form1 любую модификацию, применяемую к этому параметру текстового поля, при выполнении Form2.
Я положил весь класс Form1, чтобы показать, что в этом классе ничего особенного нет, кроме перегрузки вызова метода f2.ShowDialog().
Шаг 2) Получение и возвращение параметр (ы) с помощью перегруженного ShowDialog() метод:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void btnReturn_Click(object sender, EventArgs e)
{
this.Close();
}
//Step 2)
//Receiving and returning parameter(s) via the overloaded ShowDialog() method.
//This saves the need to have Properties and or fields associated
//to parameters when overloading the above Form() constructor instead.
public void ShowDialog(ref TextBox txtBoxForm1)
{
//Assign received parameter(s) to local context
txtBoxForm2.Text = txtBoxForm1.Text;
this.ShowDialog(); //Display and activate this form (Form2)
//Return parameter(s)
txtBoxForm1.Text = txtBoxForm2.Text;
}
}
Я снова подается полный класс формы (Form2 в данном случае) кода, чтобы показать, насколько ограничены является кодирование вмешательства. Здесь не требуется дополнительное поле или собственность. Это потому, что я использовал здесь инструкцию ShowDialog(), а не конструктор Form2() из Form1, чтобы передать параметр. В отличие от конструктора Form2() метод ShowDialog() представляет собой оболочку вокруг фазы взаимодействия с пользователем Form2. Таким образом, его синхронизация позволяет параметру '(ref txtBoxForm1) быть полным и достаточным представителем параметра, который мы хотим отправить и принять.
Перегрузка метода путем повторного объявления его с помощью другого набора параметров (также называемого сигнатурой) является мощной функцией C# .net. В этом случае здесь он позволяет с одной стороны добавлять параметр (ы) к вызову метода ShowDialog(), а с другой стороны перегруженный метод ничего не теряет из исходной версии этого же метода, поскольку исходная версия метод Framework ShowDialog() .net выполняется также через 'this.ShowDialog();' инструкция.
Это для меня об этом сейчас.
Надеюсь, это поможет!
Идеальное решение для обработки ссылок –
- 1. Передача параметров вперед и назад между Powershell и Access VBA
- 2. Передача данных вперед и назад между действиями
- 3. Передача char * назад и вперед между функциями
- 4. Как переключаться между 2 формами окон назад и вперед
- 5. Передача параметров между формами в MS Access
- 6. Передача параметров между двумя формами в VB.Net
- 7. C++ переключение между итерацией вперед и назад
- 8. Передача данных между формами C#
- 9. Передача объекта между формами C#
- 10. Передача данных между формами C#
- 11. Python - Передача аргументов вперед и назад между функциями
- 12. Назад и вперед между контроллерами
- 13. C# Передача значений между формами в DataGridView
- 14. Передача объекта между формами в C#
- 15. Android - передача Intents назад и вперед
- 16. Передача данных между формами в C#
- 17. Передача информации между формами
- 18. Передача данных между формами
- 19. Передача данных между формами
- 20. Передача массиваList между формами
- 21. Передача AVLTree между формами
- 22. EMGU (openCV) Передача изображения назад и вперед между C# и C++
- 23. C# передача данных между формами без ShowDialog()
- 24. Передача значений между формами Windows C#
- 25. C# - Передача данных между двумя формами
- 26. Перемещение вперед и назад вперед
- 27. Отправка переменных указателей вперед и назад между C++ и Lua?
- 28. Передача переменных между 2 формами, многопоточность C#
- 29. segue назад и вперед между viewcontrollers
- 30. Итерация вперед и назад
Спасибо, также есть ли способ передать параметры form2 из формы1? Тот же код создаст вторую форму1, верно? –
Вы можете воспользоваться конструкцией в Form2 для предоставления параметров или использовать другие свойства, которые вы установили перед вызовом ShowDialog (но вам нужно будет внести какие-либо изменения в элементы управления после 'InitializeComponent()' если эти proeprties фактически влияют на способ отображения формы). –
@DazSlayer: я добавил дополнительную информацию в образец, чтобы показать значения нажатия и вытягивания значений из другой формы. –