2016-09-18 2 views
1

Ich mache eine C# Windows App und versuche, Objekte in Form (zum Beispiel TextBox und Label) programmgesteuert zu erstellen. Und ich kann das leicht machen, aber ich kann sie nicht als öffentliche Objekte definieren. Ich habe eine Funktion ‚makeTextBox(...)‘ in einer Klasse namens ‚varstats‘ genannt und dies ist die Funktion:wie auf ein Objekt zuzugreifen, das mit einer Funktion in c gemacht wurde #

public static void makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "") 
    { 
     TextBox txt = new TextBox(); 
     txt.Name = strName; 
     txt.Parent = pnlMain; 
     txt.AutoSize = true; 
     txt.Width = (pnlMain.Width - 9 * defdis)/3; //defdis is a public int and means default distance 
     txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis); 
    } 

Und das ist meine Hauptform Code in Form Last:

varstats.makeTextBox(pnlMain, 0, 0, "txtCustName"); 

Diese Funktion ist sehr richtig (: D) und ich kann die TextBox in meinem Panel sehen, aber wie kann ich auf die TextBox zugreifen? Zum Beispiel muss ich in einer anderen Form die Text-Eigenschaft von TextBox lesen und sie in meiner Datenbank speichern? Wie macht man das?

Beachten Sie, dass ich sie nicht im Header meiner Klasse definieren kann, weil ich zu viele Objekte mit for for oder while machen möchte und auch möchte ich sie entfernen und einige andere Objekte in einigen Fällen erstellen.

Antwort

1

einfachste Ansatz ist Textbox von Ihrer Methode zurückzukehren und dann verwenden:

// return is changed from void to TextBox: 
public static TextBox makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "") 
{ 
    TextBox txt = new TextBox(); 
    txt.Name = strName; 
    txt.Parent = pnlMain; 
    txt.AutoSize = true; 
    txt.Width = (pnlMain.Width - 9 * defdis)/3; //defdis is a public int and means default distance 
    txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis); 

    // return the textbox you created: 
    return txt; 
} 

Und jetzt können Sie den Rückgabewert einer Methode einer Variablen zuweisen und verwenden Sie es, wie Sie wollen:

TextBox myTextBox = varstats.makeTextBox(pnlMain, 0, 0, "txtCustName"); 

// for example, change the text: 
myTextBox.Text = "Changed Text"; 
+0

Es ist eine gute Idee, aber ich habe eine andere Funktion namens 'preparePanel' und diese Funktion machen zu viele Steuerelemente mit verschiedenen Typen (TextBox, Label, DataGridView, ...) und diese Funktion verwenden die Funktionen' makeLabel' und .... und ich sollte eine Reihe von verschiedenen Kontrollen in meiner 'preparePanel' -Funktion zurückgeben. Ist es möglich, ein solches Array zu haben? – KamyarM

+0

Ich fand die Antwort ([Hier] (http://stackoverflow.com/questions/11395315)). Vielen Dank für Ihre Antwort. :) – KamyarM

Verwandte Themen