2012-02-23 5 views
0

Я новичок в C#, и мне нужно иметь доступ к объявленной переменной из Form1 в Form2. Переменный пример:Переменный доступ из Form1 в From2

decimal Total = 0.00M; Общее количество увеличивается, когда пользователь вводит предметы.

Мне нужна форма 2, чтобы получить доступ к переменной Total из Form1 после того, как пользователь завершил ввод элементов и после того, как пользователь выберет способ оплаты. Я могу указать Total в Form2.

Как я могу это сделать?

ответ

4

Если Form1 имеет ссылку на Form2, вы можете просто получить к нему доступ в виде переменной. Как это:

public class Form1 
{ 
    public decimal Total {get; set;} 
} 

public class Form2 
{ 
    public Form2() 
    { 
    var form1 = new Form1(); 
    form1.Show(); 

    ..later, after use has done some work and you need the variable 
    var total = form1.Total; 
    } 
} 
+0

+1 для отображения другого сценария для этой проблемы и правильного решения. –

+0

@Steven P ваш пост немного отличается от меня. В вашем примере вы создаете 'public class Form1 {public decimal Total {get; set; }} 'где-нибудь в программе, созданной MSVS? – ajaustin12

+0

@Steven P Что такое технический термин или имя метода, поэтому я могу сделать больше исследований? – ajaustin12

1

Создайте статическую переменную в другом классе или в одном из классов. Доступ ко всем статическим переменным. Вам нужно сделать переменную generic/static. Вот как я это сделаю.

+0

Я не уверен, как это сделать. Я читал о занятиях несколько раз и до сих пор не понимаю их. – ajaustin12

+0

У вас есть класс Form1. добавьте переменную типа «public static int Total {get; set;}). В Form2 что-то происходит: Form1.Total ++. Таким образом, изменяется поле Form1. – iefpw

+0

Благодарим вас за разъяснение. переменная/класс – ajaustin12

1

Вы можете передать Form1 вашему Form2 (в случае, если вам нужно больше переменных):

public class Form2 
{ 
    public Form1 form1 { get; set; }; 
} 

Я думаю, вы должны позвонить Form2 из Form1, так что вы можете сделать что-то вроде это:

public class Form1 
{ 
    private void callForm2() 
    { 
     Form2 form2 = new Form2(); 
     form2.form1 = this; 
     form2.Show(); 
    } 
} 

Я не рекомендую использовать статические переменные, поскольку они могут дать вам некоторые проблемы в случае, если у вас есть более чем 1 Form1 открыт в приложении.

+0

@ ajaustin12, что я пытаюсь сказать, что у вас могут быть два или более экземпляра 'Form1',' Form2' или 'FormX', и вы должны иметь контроль над экземпляром формы (и ее переменными), который фактически показан Пользователь. –

+0

спасибо. Единственное, что я потерял, это то, как и где я могу создать класс? Уже поздно, поэтому мне сейчас труднее следовать. – ajaustin12

+0

@ ajaustin12 Я отредактирую свое сообщение, дающее больше информации о манипуляциях с Windows Forms. Кстати, скажите, пожалуйста, вашу версию Visual Studio и.Net Framework, который вы используете, поэтому я могу опубликовать лучший ответ. –

0

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

Смежные вопросы