Как я могу использовать переменные из Form1 в Form2? - PullRequest
1 голос
/ 30 ноября 2011

У меня есть 2 формы: Form1 и Form2. Я открыл Form2, используя:

Form2 newForm2 = new Form2(this);

А теперь я хочу получить доступ к некоторым переменным или методам из Form1, которые установлены публично, например: public int counter;

Но когда я пытаюсь сделать это из Form2, выдается ошибка:

Error 4 'System.Windows.Forms.Form' does not contain a definition for 'StartGame' and no extension method 'StartGame' accepting a first argument of type 'System.Windows.Forms.Form' could be found (are you missing a using directive or an assembly reference?)

Edit: В форме 1:

Form2 newForm2 = new Form2(answer, button3, button4, button5, button6, this, fiftyfifty, web, change);
newForm2.Show();

В форме 2:

Form originalParent;
public Form2(int answer, Button button3, Button button4, Button button5, Button button6, Form parentform, int fiftyfifty, int web, int change)
{
    InitializeComponent();
    originalParent = parentform;
}

и я пытаюсь получить доступ к этому как originalParent."public Method here", и это дает мне эту ошибку.

Ответы [ 8 ]

3 голосов
/ 30 ноября 2011

Ваш конструктор Form2 определен для получения универсального Form в качестве параметра в конструкторе. Вам нужно получить форму типа Form1, поэтому измените конструктор Form2 на:

   private Form1 originalParent;
   public Form2(
          int answer, Button button3, Button button4,
          Button button5, Button button6,
          Form1 parentform, int fiftyfifty,
          int web, int change)
   { 
       InitializeComponent();
       originalParent = parentform;
   }
2 голосов
/ 30 ноября 2011

Из вашего опубликованного кода я предполагаю, что вы написали конструктор для Form2, который принимает экземпляр Form. Отредактируйте этот конструктор так, чтобы вместо него использовался экземпляр Form1. Или просто приведите экземпляр Form как Form1.

0 голосов
/ 29 декабря 2011

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

2- Эта часть не является ответом на ваш вопрос, но может помочь вам понять, почему вы не должны делать то, что делаете.

Я сделал приложение с почти таким же кодом, что и вы, но кто-то посоветовал мне, что это не очень хорошая практика или даже не похожая на ООП, поэтому Я отправил вопрос , чтобы попытаться немного выучить Больше.

Посмотрите, есть код, который помогает вам устанавливать вещи по-разному и даже так же, как вы пытаетесь.

0 голосов
/ 01 декабря 2011

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

public static int counter;

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

Form1.counter++;
0 голосов
/ 30 ноября 2011

Вы можете проверить, есть ли у вас форма 2, получить экземпляр формы 1, где определена переменная.когда у вас есть идентификатор экземпляра для экземпляра form1, из которого вы вызываете форму 2, просто создайте новую форму 1 ref.

IE Form1 frm1; public find(Form1 callingform) { InitializeComponent(); frm1 = callingform; }

, затем просто вызовите форму 2 form2);

0 голосов
/ 30 ноября 2011

Я предполагаю, что аргумент this вашего конструктора Form2 является экземпляром Form1, и поэтому этот код вызывается из Form1.

Я также предполагаю, что у вас есть закрытый член Form2 private Form _form1;, значение которого присваивается в конструкторе.

Если эти предположения верны, это можно исправить, изменив объявление на private Form1 _form1;.

Вам также необходимо изменить тип параметра конструктора с Form на Form1 (с учетом MusiGenesis).

0 голосов
/ 30 ноября 2011

Вам нужно вызывать StartGame для экземпляра Form1, а не System.Windows.Forms.Form.

Если Form1 является Владельцем Form2, вам нужно будет разыграть Owner как тип Form1.Если Form1 является параметром для Ctor в Form2, вам нужно убедиться, что параметр Ctor определен как тип Form1, и сохранить ссылку на Form1 из экземпляра Form2.

0 голосов
/ 30 ноября 2011

Приведите ссылку на тип Form1 в Form2, затем получите доступ к публичной функции Form1.

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