2012-05-14 3 views
5

Я новичок в C# и visual studio, но не программирование в целом. Я искал ответ на свой вопрос в течение 3 дней, и я нашел много их, но по какой-то странной причине (я уверен, что мне не хватает чего-то очень очевидного). Я не могу заставить его работать. Я думаю, что это самый простой вопрос, как я спрашиваю. У меня есть форма (Form3) с текстовым полем и кнопкой (я настроил это только для целей тестирования). Я хочу заполнить и прочитать это текстовое поле из другого класса. Я понимаю, что наиболее подходящий способ сделать это - создать свойство в Form3.cs с помощью GET и SET accessors. Я сделал это, но я не могу заставить его работать. Я не получаю никаких сообщений об ошибках, но я также не могу установить значение текстового поля. Он просто остается пустым. Вот мой пример кода:Доступ к управлению формой из другого класса C#

namespace WindowsFormsApplication1 
{ 
    public partial class Form3 : Form 
    { 
     public string setCodes 
     { 
      get { return test1.Text; } 
      set { test1.Text = value; } 
     } 

     public Form3() 
     { 
      InitializeComponent(); 
     } 

     private void Form3_Load(object sender, EventArgs e) 
     { } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      a.b(); 
     } 
    } 

    public class a 
    {  
     public static void b() 
     { 
      Form3 v = new Form3(); 
      v.setCodes = "abc123"; 
     } 
    } 
} 

Может кто-то протянуть мне руку Решая это?

+1

Вам может понадобиться, чтобы узнать (или нарисовать) идею ключевого слова 'static' и как работают экземпляры объектов. Если вам нужна помощь в поиске этого, используйте Google, найдите базовые объекты для объектно-ориентированного программирования или спросите здесь. –

+0

Привет, Тим, ты на 100% прав. Мне нужно обратиться за помощью и узнать, как использовать статическое ключевое слово. Я как бы чувствовал, что это по крайней мере часть проблемы. -Тони. – Tony

ответ

2

Вы создаете фирму new Form3() экземпляр.
Это не влияет на существующую форму.

Вам необходимо передать форму в качестве параметра к методу.

5

Проблема в том, что вы устанавливаете значение в новый экземпляр формы. Попробуйте что-то вроде этого:

public partial class Form3 : Form { 
    public string setCodes 
    { 
     get { return test1.Text; } 
     set { test1.Text = value; } 
    } 

    private A a; 

    public Form3() 
    { 
     InitializeComponent(); 
     a = new A(this); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    {    
     a.b();    
    } 


    private void Form3_Load(object sender, EventArgs e) 
    { 

    } 
} 

public class A 
{  
    private Form3 v; 

    public a(Form3 v) 
    { 
     this.v = v; 
    } 

    public void b() 
    { 
     v.setCodes = "abc123"; 
    } 
}  
+0

Hi ivowiblo, Как я уже сказал, я новичок, но ответ ниже Enigmativity кажется мне менее сложным для меня, и он действительно работает. Он не создает новый экземпляр класса A в Form3, и в классе A есть только 1 метод. Похоже, что существует множество уникальных ответов, так как есть люди, отвечающие. Красота интернета. Спасибо за ваш ответ, я получил от него уникальную перспективу. – Tony

+0

Да. Я бы сказал, что C# является объектно-ориентированным языком, и я предлагаю использовать объектно-ориентированные проекты вместо процедурных проектов. Как вы говорите, решение @ Enigmativity делает эту работу, и все в порядке. Возможно, в вашем фактическом сценарии у вас более сложная ситуация, и использование объекта упростит (предположим, вам нужно передать больше вещей, некоторые из которых не знают форма) – ivowiblo

2

Попробуйте это:

public partial class Form3 : Form 
{ 
    /* Code from question unchanged until `button1_Click` */ 

    private void button1_Click(object sender, EventArgs e) 
    { 
     a.b(this); 
    } 
} 

public class a 
{  
    public static void b(Form3 form3) 
    { 
     form3.setCodes = "abc123"; 
    } 
} 

Это проходит текущий экземпляр формы к другому классу, так что он может обновить setCodes свойства. Раньше вы создавали новый экземпляр формы, а не обновляли текущую форму.

+0

Привет, это сработало очень хорошо. Я действительно ценю твою помощь. -Тони. – Tony

-2

Отправка экземпляра формы к другой другой класс

Form1 objForm1=new Form1(); 
obj.Validate(objForm1); 

Легкий способ доступа к элементам управления в другом классе, модифицируя Controls Private к Public в форме (designer.cs)

+0

как вы смогли получить obj.Validate? – Androidz

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