Передача значений между двумя формами окон - PullRequest
2 голосов
/ 12 июля 2010

Дело в том, что у меня есть две разные формы из одного решения / проекта. Что мне нужно сделать, это извлечь значение метки в форме A и загрузить его в форму B. По мере возможности я избегаю использования этого кода, поскольку он будет конфликтовать только со всей моей программой:

FormB myForm = new FromB(label.Text);
myForm.ShowDialog();

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

Я надеюсь, что кто-нибудь может мне помочь с этим. Любые другие способы сделать это чрезвычайно ценится. :)

    public class Miscellaneous
    {
       string my_id;

       public void SetID(string id)
       {
           my_id = id;
       }

       public string GetID()
       {
           return my_id;
       }
     }

Ответы [ 5 ]

2 голосов
/ 12 июля 2010

Вы можете сделать что-то вроде этого:

Дочерняя форма

public string YourText { get; set; }

public TestForm()
{
    InitializeComponent();
}

public void UpdateValues()
{
    someLabel.Text = YourText;
}

Инициировать это

var child = new TestForm {YourText = someTextBox.Text};

child.UpdateValues();

child.ShowDialog();

При таком подходе вам не нужно менять конструктор, вы также можете добавить еще один конструктор.

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

private string _yourText = string.Empty;
public string YourText
{
    get
    {
        return _yourText;
    }
    set 
    { 
        _yourText = value;
        UpdateValues(); 
    }
}

В этом случае пользовательский интерфейс будет обновляться автоматически при установке свойства.

0 голосов
/ 31 октября 2017

объявляет открытое свойство переменной во второй форме

Public property somevariable as sometype

и обращается к нему в первой форме, используя экземпляр

Dim obj as New form2()
obj .somevariable ="value"
0 голосов
/ 07 февраля 2012
((Form2)Application.OpenForms["Form2"]).textBox1.Text = "My Message";
0 голосов
/ 12 июля 2010

Вы можете использовать статическую переменную / метод для хранения / передачи значения элемента управления (когда оно изменяется).

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

Для этого вы можете использовать пользовательское событие (уведомляя код, подписавшийся).,FormB myForm = new FromB(label.Text); не сработало, потому что вы передаете по значению, и значение было пустым на момент создания FormB.FormB myForm = new FromB(label); сработало бы.

0 голосов
/ 12 июля 2010

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

Возможно, есть более чистые способы сделать это, но просто подумать о простом способе передачи информациитуда и обратно и храните любую информацию, необходимую для обеих форм.

РЕДАКТИРОВАТЬ: Вот пример синглтона, который я взял отсюда:

http://www.yoda.arachsys.com/csharp/singleton.html

public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

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

Singleton.Instance.YourProperty
...