2013-06-01 12 views
5

Próbuję zmienić wartość w polu tekstowym znajduje się wZmiana pola tekstowego z innej klasy

public partial class Form1 : Form 

z innej klasy. Próbowałem coś takiego

public void echo(string text) 
{ 
    this.textBox1.AppendText(text + Environment.NewLine); 
} 

z innej klasy Wołam go jak

Form1 cout = new Form1(); 
cout.echo("Does this work?"); 

i uzyskać pusty wyjście. Próbowałem również dodać słowo kluczowe static do metody echo, ale otrzymałem ten sam wynik. Przeszukałem ponad stosem   Przepełnienie i nie otrzymałem żadnego rozwiązania. I jedna rzecz, która mnie wyzwala, jeśli dodam cout.Show(), ta sama forma wyskoczy z ważną treścią textBox1. Dlaczego?

Dlaczego od razu nie wyświetla treści? I jak to naprawić?

Odpowiedz

10

każdym razem mówisz nowy Form1(), tworzysz różne i odrębne wystąpienie tej formie.Zamiast tego musisz utworzyć zmienną w klasie, do której próbujesz uzyskać dostęp do formularza. Na przykład, powiedzmy, przekazać go w konstruktorze:

public class MyClass { 
    public Form1 MyForm; 

    public MyClass(Form1 form){ 
     this.MyForm = form; 
    } 

    public void echo(string text) { 
     this.MyForm.textBox1.AppendText(text + Environment.NewLine);    
    } 

} 

zauważyć, że dostęp do konkretnej instancji Form1 w metodzie echa:

public void echo(string text) { 
    this.MyForm.textBox1.AppendText(text + Environment.NewLine); 
} 
+0

AHAM, że dostał. Wszyscy z was dali mi właściwą odpowiedź i wyjaśnienie, dlaczego tak się dzieje, ale ponieważ nFreeze napisał rozwiązanie tego problemu, zaznaczę jego odpowiedź jako poprawną. Dziękuję wam wszystkim! – Dejano

+1

Musisz również zmienić "modyfikatory" na "Publiczny" dla pola tekstowego. – Hadron

4

Problemem jest tutaj:

Form1 cout = new Form1() ; 
cout.echo("Does this work?"); 

Tworzysz nowy wersję swojej głównej postaci, Form1.

Co to jest ta druga klasa i jak jest tworzona?

Masz dwie opcje:

  1. Kiedy Twój kod w Form1 tworzy klasę, daj mu wystąpienie do this i wywołać metodę echo w tym w odniesieniu do (jedynego) instancji Form1.

  2. Dodaj event do tej drugiej klasy, która jest wyrzucana, gdy chce podać pewne informacje. Twój kod Form1 zarejestruje procedurę obsługi zdarzeń w tym wydarzeniu i wykona połączenie z numerem echo, gdy zdarzenie zostanie wywołane.

0

Tworzysz zupełnie nowy Form1. Powodem, dla którego jeden pojawia się podczas wywoływania Show(), jest wyświetlanie nowego okna. Nie jestem pewien, jakie są twoje rzeczywiste zamiary, ponieważ nie wiem, skąd dzwonisz, ale chcesz zadzwonić pod numer echo dla już utworzonego .

1

Zamiast cout spróbuj MessageBox.Show("Does this work?");

Teraz wysyłania wartości pola tekstowego z jednej formy do drugiej.

protected void btnNext_Click(object sender, EventArgs e) 
{ 
    MyForm2 x = new MyForm2(); 
    x.Query = "My Query"; // here "Query" is your custom public string variable on form2 
    x.Show() 
} 
1

Nie trzeba tworzyć kolejnego obiektu Form1.

Spróbuj ten kod i myślę, będzie odgadnąć, co się dzieje:

Form1 cout = new Form1(); 
cout.Show(); 
cout.echo("Does this work?");