2017-01-30 2 views
-3

Ich mag würde eine WinForm in meine Konsole App hinzuzufügen:Verwenden Textbox Wert in einer anderen cs-Datei

namespace ExchangeNativeDemo.Window 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

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

Ich möchte textbox1 Wert Program.cs passieren, wie:

var emailaddress = textbox1.value 

In Program.cs:

using ExchangeNativeDemo.Window; 

namespace ExchangeNativeDemo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

Aber ich den Fehler bekam:

is inaccessible due to its protection level

Was habe ich vermisst?

+0

Kann ich eine einfache Frage stellen, warum nicht einfach die Anwendung auf eine WinApp ändern? –

Antwort

-1

Ich glaube, Sie müssen Ihre var als öffentlich deklarieren, ansonsten ist es automatisch privat. Versuch es und lass es mich wissen.

1

Wenn Sie einem WinForm mit Visual Studio eine TextBox (oder ein anderes Steuerelement) hinzufügen, wird das Steuerelement standardmäßig auf protected scope gesetzt. Dies bedeutet, dass der einzige Code, der darauf zugreifen kann, der Code in WinForm selbst oder von ihm abgeleitete Klassen ist .

Es gibt zwei Optionen:

  1. einfach die TextBox protected-public ändern. Dies unterbricht die Kapselung ein wenig, so dass dies nicht mein Favorit ist.

  2. Schreiben Sie eine benutzerdefinierte Eigenschaft, die die Text -Eigenschaft des Textfelds verfügbar macht, z.

    class Form1 
    { 
        //.....Other stuff.... 
        public string Text1Value 
        { 
         get { return this.textbox1.Text; } 
        } 
    } 
    

    Da Sie wissen, dass es die E-Mail-Adresse sein soll, und Sie wollen zumindest versuchen, ein wenig eingekapselt zu sein, könnten Sie eigentlich wollen es EmailAddressEntered oder etwas ähnliches zu nennen.

    public string EmailAddressEntered 
    { 
        get { return this.textbox1.Text; } 
    } 
    

    Dann in Ihrem Hauptprogramm, erstellen Sie eine Instanz des Formulars, zeigen Sie es an, und lesen Sie dann die Eigenschaft.

    void Main() 
    { 
        //....do other stuff.... 
        var form = new Form1(); 
        form.ShowDialog(); 
        var emailaddress = form.EmailAddressEntered; 
    } 
    

Beachten Sie auch, ein TextBox keinen Wert haben. Der Inhalt wird stattdessen in der Text-Eigenschaft gespeichert.

Beachten Sie auch, Ihre main Funktion sollte einen Anruf an Application.Run enthalten oder Sie werden feststellen, dass Form1 nicht sehr gut funktioniert.

+0

Sie können immer noch Syntax-Highlighting innerhalb einer Liste haben, aber verwenden Sie doppelte Einrückung – abatishchev

+0

ty !!!die Dinge, die du lernst –

+0

Danke. Über Application.Run, nach dem Hinzufügen von Application.Run(); bewegt sich meine Konsolenanwendung nicht weiter: – user2655495

0
  • Sie benötigen textbox1öffentlichen,

  • oder fügen Sie Eigenschaft `Form1 zu machen, dass sein Wert aussetzt:

    public string Textbox1Text 
    { 
        get { return textbox1.Text; } 
    } 
    
Verwandte Themen