Как передать значения между формами в приложении c # windows?

У меня две формы A и B. Форма A является формой запуска приложения по умолчанию. Я делаю некоторые вещи в форме A и i, тогда я хочу запустить свою форму B параллельно, а затем передать параметр методу в форме B из формы A.

Как ?

Ян дал некоторый пример кода, но я хотел бы сделать более широкий вывод:

Классы UI – это просто classы.

Как бы вы передали значение от одного объекта другому объекту, если они не были частью пользовательского интерфейса? У вас будет ссылка от одного к другому, и вызовите метод или установите свойство. То же самое верно для объектов пользовательского интерфейса.

Я упоминаю об этом, потому что это что-то очень много. Всякий раз, когда вы спрашиваете себя: «Как мне делать X с формами?» попробуйте задать себе тот же вопрос, но с обычными старыми classами. Часто ответ будет точно таким же.

Конечно, есть некоторые различия в classах пользовательского интерфейса – особенно при streamовой передаче – но для очень многих случаев это действительно помогает, если вы просто думаете о них как о нормальных classах.

FormA должен создать / удержать экземпляр FormB. Очевидно, что метод в FormB должен быть общедоступным, также измените тип объекта, который используется в CallMethodOnFormB, на правильный тип.

public class FormA { private FormB fB; public void CreateFormB() { // This shows the form in parallel. this.fB = new FormB(); this.fB.Show(); } public void CallMethodOnFormB(object value) { this.fB.RunSomeFunction(value); } } 

В зависимости от ваших потребностей, другой подход состоял бы в том, чтобы представить глобальный экземпляр classа ( singleton ), который может содержать материал, который должен быть разделен между несколькими формами / classами вашего приложения.

Например, если у вас есть форма, где пользователь может определить свои настройки / предпочтения, вы можете сохранить эти данные в одноэлементном режиме. Все остальные classы и формы вашего приложения могут затем получить / прочитать эти настройки из одного и того же экземпляра singleton.

Вот очень простой пример синглтона:

 public class MySettings { // the one and only instace (the singleton): public static readonly MySettings Instance = new MySettings(); private MySettings() {} // private constructor public int SomeNumber { get; set; } public string SomeString { get; set; } } 

Теперь вы можете получить доступ к настройкам / получить свойства MySetting из любого другого classа / формы в вашем приложении, например:

в PreferencesForm.cs:

 //read the user's input and store it in the settings MySettings.Instance.SomeNumber = txtNumber.Value; 

в SomeOtherForm.cs:

 //read the user's setting and use it int theNumber = MySettings.Instance.SomeNumber; // do something with theNumber 
  • Нет Main () в WPF?
  • Инициализировать библиотеку при загрузке сборки
  • Как вы добавляете int в строку на C ++?
  • Закрытие процесса приложений Excel на C # после доступа к данным
  • Почему classу XML-Serializable нужен конструктор без параметров
  • OCR с интерфейсом Tesseract
  • AVX2, что является наиболее эффективным способом для упаковки влево на основе маски?
  • Используется ли для объявлений локальных функций?
  • Проходит ли указатель указателя, передается по значению в C ++?
  • C # / F # Сравнение производительности
  • Печать всех глобальных переменных / локальных переменных?
  • Interesting Posts

    Автоматическая последовательная нумерация по критериям ячейки

    Как импортировать образ диска VMDK в экземпляр AW2 EC2 t2.micro в область us-east-1e, используя ведро S3 на us-east-1?

    Как настроить начальную страницу для отладки в приложении ASP.NET MVC?

    Добавить водосточный желоб (привязка) к существующему файлу PDF

    Bash не анализирует кавычки при преобразовании строки в аргументы

    Каков наилучший способ получить текущий URL в Spring MVC?

    Почему должен использоваться идиома «PIMPL»?

    Как удалить все не буквенно-цифровые символы из строки, кроме периода и пробела в excel?

    В чем разница между atan и atan2 в C ++?

    gson.toJson () выбрасывает StackOverflowError

    Лучший подход для синтаксического анализа XML на iPhone

    Установка DPI в OSX

    C # Проверка ввода текстового поля на winforms

    Включить ReadyBoost на второй внутренний жесткий диск?

    Mac – преобразование из чувствительной к регистру файловой системы, нечувствительной к регистру

    Давайте будем гением компьютера.