2016-09-27 3 views
1

Как мне получить доступ к строковой переменной form1 из другого класса?Доступ к переменным form1 из другого класса как?

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

    public string deva = "123"; 

    //button 
    private void button8_Click(object sender, EventArgs e) 
    { 
     deva = "456"; 
    } 

    private void button9_Click(object sender, EventArgs e) 
    { 
     Other ks = new Other(); 
     ks.test_me(); 
    } 
} 

public class Other: Form1 
{ 
    //trying to access Form1 variable. 
    public void test_me() 
    { 
     Form1 fm = new Form1(); 
     MessageBox.Show(fm.deva); 
     //deva is 123 but not 456. 
     //I clicked on button and values changes it form1 however from here it assigns just default value 
    } 

// 
//Does creating a new form1 will reset its values? 
//Somebody please help me. how to solve this issue. 
} 
+2

Да, это будет иметь значение по умолчанию - потому что вы создаете * новый экземпляр * из 'Form1'. Это не будет иметь значений, связанных с любым другим экземпляром 'Form1'. Половина точки объектно-ориентированного программирования состоит в том, что объекты имеют * состояние * ... два разных объекта имеют независимое состояние, поэтому вы не можете попасть в состояние одного объекта, создав другое. В этом случае, поскольку вы «в» экземпляре 'Form1' в любом случае (потому что' Other' наследует от 'Form1'), вы, вероятно, просто хотите' MessageBox.Show (deva); ', доступ к состоянию * этого экземпляра *. –

+0

Какова ваша цель? Получить доступ к нему в другом классе? или отобразить его в том же классе, что и вы попытались внутри button9_click? – snit80

ответ

0

сделать ваши переменные деве Static. Получите доступ к классу напрямую, а не к объекту.

public static string deva = "123"; 

public void test_me() 
{ 
    //Form1 fm = new Form1(); 
    MessageBox.Show(Form1.deva); 

} 
+0

Благодарим вас за ответ. –

0

значение по умолчанию устанавливается на каждый новый экземпляр , если вы хотите сохранить последнее значение вы делаете static свойство

public static string deva = "123"; 
+0

Благодарим вас за ответ. –

1

ответа на вопрос название.
Прочтите комментарий Джона Скита для объяснения причины, почему ваш подход не работает.

Если вы хотите иметь доступ к переменным другому экземпляру, то вам необходимо в каком-то есть ссылка на этот экземпляр

Один из способов передать его в конструкторе Other

public class Other: Form1 
{ 
    private readonly Form1 _Form1; 

    public Other(Form1 form1) 
    { 
     _Form1 = form1; 
    } 

    public void test_me() 
    { 
     MessageBox.Show(_Form1.deva); 
    } 
} 

Тогда где вы создаете новый экземпляр Other прохода экземпляра вашего Form1 ти конструктор Other

public class Form1 
{ 
    private void button9_Click(object sender, EventArgs e) 
    { 
     Other ks = new Other(this); 
     ks.test_me(); 
    } 
} 
+0

Спасибо всем. Я мог бы задать вопрос раньше. Я потратил часы, чтобы исправить это. Теперь я не чувствую стресса. –

2
public partial class Form1: Form { 

public Form1() 
{ 
    InitializeComponent(); 
} 
public string deva = "123"; 

//button 
private void button8_Click(object sender, EventArgs e) 
{ 
    deva = "456"; 
} 

private void button9_Click(object sender, EventArgs e) 
{ 
    Other ks = new Other(this); 
    ks.test_me(); 
} 
} 

нет необходимости наследовать от form1, пожалуйста, передать объект с помощью конструктора

public class Other { 
Form1 obj = null; 
public Other(Form1 object) 
{ 
    this obj = object; 
} 
public void test_me() 
{  
    MessageBox.Show(obj.deva); 

} 
} 
+0

Благодарим вас за ответ. –

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