Заполнить идентичность WinForms в текстовые поля - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть три формы, как показано ниже:

Form1

Form2

Form3

Form1 и Form3 взаимодействуют с Form2.Я хочу, если Form1 посетил Form2, чем

Form1 Должен оставить свою идентичность для text2 Form21 .Если форма 3, посещенная для формы 2, то форма 3

должна оставить свою идентичность для текстовое поле формы 2.

возможно ли это?.

По форме 1

Form2 f2= new Form2();
f2.Show();

По форме 3

Form2 f2= new Form2();
f2.Show();

И идентичность «Форма 1» и "Form3"

Ответы [ 4 ]

2 голосов
/ 16 ноября 2010

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

public partial class Form2 : Form
{
     /*.......*/
       public string Identity
       {
           set
           {
              textbox1.Text = value;
           }
       }
}

Затем в Form1 или Form3:

Form2 form2 = new Form2();
form2.Identity = this.Name;
form2.Show();
1 голос
/ 16 ноября 2010

Лучше всего перегрузить метод Show для каждой из ваших форм, чтобы принять что-то вроде параметра "предыдущая форма", который будет служить ссылкой на вызывающего (вы могли бы сделать это либо как Form объект, к свойствам которого вы затем можете получить доступ, либо просто как String). Затем, где бы вы ни отображали вторую форму из существующей формы, вы передаете информацию о существующей форме в метод Show для второй формы. Метод Show второй формы позаботится об обновлении текстового поля именем формы, которая его отображает.

Например, каждая форма будет содержать перегруженный Show метод:

public void Show(Form previousForm)
{
    //Set the textbox on this form to contain the name of the calling form
    myTextBox.Text = previousForm.Name;

    //Call the base class's method to show this form
    base.Show();
}

И вы бы показывали одну форму из другой, вызывая ее перегруженный Show метод:

private void ShowOtherFormButton(object sender, EventArgs e)
{
    //Create a new instance of the form you want to display
    Form2 myOtherForm = new Form2();

    //Show the other form, passing the calling form as a parameter
    myOtherForm.Show(this);
}

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

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

0 голосов
/ 16 ноября 2010

Вам нужно передать данные между оконными формами (т. Е. Имя формы в этом сценарии), чтобы вы могли получить их в Form2. Для передачи данных между окнами см. Ссылку: http://www.vbdotnetheaven.com/UploadFile/thiagu304/passdata12262006073406AM/passdata.aspx

0 голосов
/ 16 ноября 2010

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

public partial class Form2 : Form
{
    Form _caller;//Caller form

    //Default constructor 
    public Form1()
    {
        InitializeComponent();
    }

    public Form1(Form caller)
    {
        InitializeComponent();
        this._caller = caller;
        textbox2.Text = caller.Name;
    }   
}

Все, что вам нужно сделать сейчас, это вызвать Form2 с помощью нового конструктора:

Form2 form2Instance = new Form2(this);
form2Instance.Show();

Какая форма будет вызывать Form2, теперь ее имя будет написано в текстовом поле2 формы 2

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