разделение родительской переменной между формами - PullRequest
0 голосов
/ 16 октября 2011

форма A открывает форму B и форму A.visible = false;

форма A имеет открытую переменную int, и мне нужны элементы управления в форме B, чтобы иметь возможность доступа и изменения этой переменной.можно ли это сделать, поскольку передача значения через конструктор выполняется только одним способом!

и, если это возможно, если форма A не видна, можно ли получить доступ к значению?форма b не должна быть диалоговой!)

большое спасибо!

отредактировано: я не совсем понимаю объяснения на самом деле.пока это так:

в форме a:

    //in global space
    public int temp = 123;

    //in form_load event
    Form setup = new setup();
    setup.Show();
    this.Visible = false;

в настройке формы:

    //in form_load event
    textBox1.text = temp.toString();

    //in button_press event
    form a.temp = "456";

Надеюсь, я четко объяснил свою позицию!

Ответы [ 3 ]

4 голосов
/ 16 октября 2011

Во-первых, иметь поле члена в форме B типа A:

private FormA parent;

Во-вторых, иметь такой конструктор в форме B:

public FormB(FormA parent)
    : this()
{
    this.parent = parent;
}

Теперь, когда вы создаете экземпляр формыB, передайте ссылку на работающий экземпляр формы A:

FormB formB = new FormB(this);
formB.Show();

И вы можете получить доступ к общедоступному свойству через поле parent, например,

//inside Form B code..
public Foo()
{
    parent.PUblicProp = "Hello";
}
1 голос
/ 16 октября 2011

это один из способов передачи значений из одной формы в другую форму

 public partial class Form2 : Form
{
    public string MyProperty { get; set; }

    public Form2()
    {
        InitializeComponent();
    }



    private void Form2_Load(object sender, EventArgs e)
    {
        label1.Text = MyProperty;
    }
}

, после чего в обработчик событий нажатия кнопки в Form1 добавьте следующий код

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.MyProperty = "This is from Form1";
        form2.Show();
    }
}
1 голос
/ 16 октября 2011

Поскольку ваша переменная int равна public, ваши элементы управления в formB могут получить к ней доступ и изменить ее, видимость formA не повлияет на нее, к ней будет обращаться независимо от ее видимости:

FormA f = new FormA();
int newValue = f.yourintvariable;

И существует множество альтернативных способов, таких как использование конструктора для отправки переменной в конструкторе FormA и инициализации ее из FormB, или вы можете определить ее как static, но в этом случае будет одна переменнаядля всех случаев формы thid

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