2012-03-08 2 views
3

Предположим, у меня есть форма с именем Form1 с textBox и кнопкой в ​​ней.C# Получить значение textBox из другого класса

Я хочу получить значение textBox из другого класса при нажатии кнопки. Я пытаюсь сделать это так, но это не работает:

class Main 
{ 
    public void someMethod() 
    { 
     Form1 f1 = new Form1(); 
     string desiredValue = f1.textBox.Text; 
    } 
} 

Простите за глупый вопрос, но я довольно новое в C# и не могу получить эту вещь, чтобы работать.

+1

Пожалуйста расширение на «не работает». Если вы не инициализировали значение текстового поля в конструкторе для 'Form1', оно будет иметь значение по умолчанию' string.Empty' (т. Е. ""). – ChrisF

+0

Да. Он возвращает пустую строку. – Kirev

ответ

11

Вам нужно найти открытый Form1 вместо того, чтобы создать еще один Form1, создайте следующий класс

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    class Class1 
    { 
     public void someMethod() 
     { 
      TextBox t = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox; 
      Debug.WriteLine(t.Text + "what?"); 
     } 
    } 
} 

Затем в кнопке мыши методе

private void button1_Click(object sender, EventArgs e) 
{ 
    Class1 c = new Class1(); 
    c.someMethod(); 
} 
+1

Он работает! Благодарю. Это будет мой принятый ответ. Я просто хочу знать, является ли это самым простым (самым быстрым) способом получить значение textBox из другого класса? – Kirev

+0

не уверен, что это самый быстрый способ, это очень просто. Если вам нужно изменить значение текстового поля из другого класса, рассмотрите его как общедоступный. Идея заключается в том, что вам нужно найти экземпляр вашей формы1 – uowzd01

+0

Как я могу получить к нему доступ, если он является общедоступным? Только один пример, и я перестану спрашивать, потому что я чувствую себя ужасно. – Kirev

1

Я думаю, это потому, что вы создаете новый экземпляр формы1, чтобы на самом деле получить текст текстового поля из f1.

5

Ваш текстовый блок, вероятно, private, хотя это как и должно быть. Если вам нужен текст из текстового поля вы можете выставить его со свойством

public string TextBoxText{ get { return textBox.Text; } } 
+0

Я пробовал с публичным и общедоступным statis, но снова не могу получить доступ к исходному textBox. – Kirev

+0

, тогда вы должны получить доступ к форме, которая была создана для вас ранее. посмотрите в program.cs, там вы увидите основную форму, которая создана и показана. это (мое сильное предположение) *, что * 'Form', к которому вам нужно получить доступ. «SomeMethod» должен иметь некоторую ссылку на это, вы должны просто пройти по «Form1» до 'someMethod()'. – Default

+0

Итак, я делаю это как в примере (Form1 f1 = new Form1();). В Program.cs у меня есть: Application.Run (новый Form1()); Тогда нет успеха с f1.textBox.Text или Form1.textBox.Text Извините за мои глупые слова, но я хочу получить эту идею: \ – Kirev

2

Когда вы говорите

Form1 f1 = new Form1(); 

Вы создаете целый новый объект со своим собственным текстовым полем.

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

+0

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

0

Этот псевдокод, или это код, который вы на самом деле пытаетесь использовать?

Если вы пытаетесь использовать этот код, то, что вы делаете, создает новый Form1. Если конструктор Form1 не помещает что-то в ваше текстовое поле, в этот момент он будет пустым.

+0

Это просто, к примеру, но я - это моя идея, да. – Kirev

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