2016-07-14 10 views
0

Ich versuche, auf ein Objekt TextBox von einer Klasse zuzugreifen. Ich habe versucht, Konstruktoren zu verwenden, aber nichts ist passiert. Es funktionierte, bis ich Panels hinzugefügt und weitere Formulare hinzugefügt habe.C# Kann nicht auf Objekt von einer Klasse zugreifen

Mein Hauptformular, das meine Form lädt:

public partial class MenuForm : Form 
{ 
    public MenuForm() 
    { 
     InitializeComponent(); 
    } 
    ConfigForm Config = new ConfigForm(); 
    GeneralForm General = new GeneralForm(); 

    private void Menu_Load(object sender, EventArgs e) 
    { 
     //Load of Config Form 
     Config.MdiParent = this.MdiParent; 
     Config.Show(); 

     //Load of General Form 
     General.Show(); 
     General.TopLevel = false; 
     Config.Controls["panel1"].Controls.Add(General); 
    } 
} 

Hier ist meine Config-Form:

public partial class ConfigForm : Form 
{ 
    private ConfigFormHelper confighelper = null; 
    private GeneralFormHelper generalhelper = new GeneralFormHelper(); 

    public ConfigForm() 
    { 
     InitializeComponent(); 
    } 

    private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     generalhelper.LoadTemplate(); 
    } 
} 

Hier ist meine allgemeine Hilfsklasse:

class GeneralFormHelper 
{ 
    GeneralForm generalform2 = new GeneralForm(); 

    public void LoadConfig() 
    { 
     this.generalform2.txtDSN1.Text = "test"; 
    } 
} 

Es gibt keine Fehler, aber txtDSN1 erhält nicht den "Test" -Text.

txtDSN1 ist auf dem public Modifikator.

+1

Sie setzen das Textfeld einer anderen Instanz, die sich von der gerade angezeigten Instanz unterscheidet. Sehen Sie sich diese Zeile in MainForm an: 'GeneralForm General = new GeneralForm();' die Sie 'Config.Show();' gezeigt haben und die andere in GeneralFormHelper: 'GeneralForm generalform2 = new GeneralForm();' –

+0

ist das korrekt? 'public GeneralForm myForm; public GeneralFormHelper (GeneralForm-Formular) { this.myForm = Formular; } ' ist das korrekt? – FatalError

+0

Überarbeiten Sie Ihr Design. Wie @RezaAghaei erwähnt, haben Sie mehrere Instanzen für 'GeneralForm' und auch' GeneralFormHelper.LoadConfig() 'scheint nicht in dem von Ihnen bereitgestellten Code verwendet zu werden. –

Antwort

1

dies wird Ihre GeneralFormHelper mit Methode GetGeneralForm()

class GeneralFormHelper 
    { 
     GeneralForm generalform2; 
     public void GetGeneralForm(GeneralForm g) 
     { 
      this.generalform2 = g; 
     } 
     public void LoadConfig() 
     { 
      this.generalform2.txtDSN1.Text = "test"; 
     } 
    } 

dies Ihre `ConfigForm Klasse:

public partial class ConfigForm : Form 
{ 
    private ConfigFormHelper confighelper = null; 
    private GeneralFormHelper generalhelper; 


    public ConfigForm(GeneralForm g) /* your Constructor get the General */ 
    { 
     this.generalhelper = g; 
     InitializeComponent(); 
    } 

    private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     generalhelper.LoadTemplate(); 
    } 
} 

und schließlich Ihre MenuForm Klasse:

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

    GeneralForm General = new GeneralForm(); 

    ConfigForm Config = new ConfigForm(General); /* you send General */ 

    private void Menu_Load(object sender, EventArgs e) 
    { 
     //Load of Config Form 
     Config.MdiParent = this.MdiParent; 
     Config.Show(); 

     //Load of General Form 
     General.Show(); 
     General.TopLevel = false; 
     Config.Controls["panel1"].Controls.Add(General); 
    } 
} 
+0

Danke btw, es heißt General existiert nicht im aktuellen Kontext – FatalError

+0

es heißt Objektreferenz nicht auf eine Instanz eines Objekts gesetzt this.generalform2.txtDSN1.Text = "test "; – FatalError

+0

ok ich ändere diese antwort, um klarer zu sein :) – Saeid

0

Wenn Sie möchten, um das Objekt von einer Klasse zu bekommen muss es so machen ..

 
    In a class: 



    using System.Windows.Forms; 
    namespace getObjectFromaClass 
    { 

    class Class1 
    { 
     public static TextBox txt1 = new TextBox(); 

     public void getText() 
     { 
      try 
      { 
       txt1.Text = "this is my text"; 
      } 
      catch (Exception er) 
      { 
       string x = er.Message; 
      } 

     } 
    } 
    } 




    In a form: 

    namespace getObjectFromaClass 
    { 
    public partial class Form1 : Form 
    { 
     Class1 cls1 = new Class1(); 
     public Form1() 
     { 

      textBox1=Class1.txt1; 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      cls1.getText(); 
      textBox1.Text = Class1.txt1.Text; 
     } 
    } 
    } 


1

Diese LoadConfig-Funktion von GeneralFormHelper wird nie aufgerufen.

public void LoadConfig() 
{ 
this.generalform2.txtDSN1.Text = "test"; 
} 

Dieser Code in der ConfigForm ruft Loadtemplate statt LoadConfig

private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    generalhelper.LoadTemplate(); 
} 

Also nur ein Tippfehler Ich denke, Ihr erstes Problem ist, und Sie müssen nur entweder LoadConfig oder Loadtemplate passen.

Das zweite Problem ist, dass das LoadTemplate (oder LoadConfig) nur aufgerufen wird, wenn das SelectedIndexChanged-Ereignis ausgelöst wird. Bis dahin erhalten Sie den "Test" -Text nicht.

+0

Es tut mir leid, es gibt eine andere Funktion vor LoadTemplate, die LoadConfig .. nur brauchte nicht, dass .. danke thanks btw – FatalError