Benutzer-Steuerelement in windows forms-Anwendung
Habe ich eine einfache Benutzer-Steuerelement mit einem Textfeld und label in it. Ich schuf öffentliche Eigenschaften für den Zugriff auf den text in der textbox wenn ich das Steuerelement in einem anderen Formular.
Mein problem ist, das Eigentum zurück-null-Wert wenn ich es in die form. Bin ich etwas fehlt?
Mein Eigentum ist wie folgt::
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public string rtnTxtMake
{
get
{
return txtMake.Text;
}
set
{
txtMake.Text = value;
}
}
}
und in die nächste forms-Schaltfläche click-Ereignis-ich nenne Sie die Eigenschaft wie folgt
UserControl1 Usc = new UserControl1();
string Make = Usc.rtnTxtMake;
MessageBox.Show(Make)
- Haben Sie jemals
txtMake.Text
nichts? - ich geben Sie Werte in die text-box, wenn ich die Anwendung ausführen.ist n nicht genug?
- manuell, wenn ich zugewiesen txtMake.Text um einen bestimmten Wert.ich bin in der Lage zu Holen Sie sich die gewünschte Ausgabe.aber wie ordne ich den Wert eingegeben während der Laufzeit zu txtMake.Text????????
- Ewww, Ungarische notation
- Es ist nichts falsch mit dem erstellen einer UserControl zur Laufzeit in Reaktion auf das Klicken auf eine Schaltfläche ! Die anderen Kommentare/Antworten schon daran erinnern : Sie müssen es hinzufügen, um eine gültige "container" (Form, Panel, etc.) um es zu verwenden, und Sie müssen tun, die in der Schaltfläche Click-Ereignis : seit dem UserControl, die Sie erstellen, gehen "out of scope", wenn das Click-Ereignis beendet wird. In den meisten Fällen werden Sie wollen, halten eine Referenz auf die neu erstellte Benutzersteuerelement, um später darauf zugreifen : sei es, dass eine bestimmte variable deklariert im Formular-Bereich, oder ein Eintrag in eine Liste<UserControl - > hängt von Ihrem design und Absicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Ihre Benutzer-Steuerung hat standardmäßig eine leere textbox-Feld, dann scheint es richtig, dass die oben genannten zwei Zeilen code, würde wieder entweder
null
oderString.Empty
(check überString.IsNullOrEmpty
), da Sie explizit erstellen Sie eine neue Instanz des Benutzersteuerelements.Ich nehme an, was Sie wirklich wollen, ist dies:
Eingefügt wurde, wird ein Benutzer-Steuerelement in ein Formular in den Designer. Nennen wir diesen Benutzer control-Instanz
ctlUser
.Haben Sie eine Schaltfläche mit einem
Click
event-handler. Die letzten paar Zeilen code, die in Ihrer Frage aus, dass die handler-Methode.In der hf, würden Sie nicht erstellen Sie eine neue Instanz des Benutzersteuerelements (
Usc
), sondern verweisen auf die eine, die Sie zuvor eingefügt in ein FormularctlUser
. Dann sollten sich die Dinge wie erwartet funktionieren.Ihrem UserControl Hinzugefügt werden müssen, um die Controls-Auflistung des parent-Formular/Steuerelement, bevor er korrekt initialisiert. Normalerweise würden Sie nicht schreiben den code selbst erstellt und fügt das Benutzersteuerelement.
Stattdessen bauen Sie zuerst Ihr Projekt, dann gehen Sie auf die Deisgner Blick auf Ihrem Haupt-form und Blick auf die Toolbox.
Ihr UserControl-Namen (und Symbol) angezeigt werden sollte in Richtung der Spitze der toolbox, und Sie können einfach ziehen Sie es auf das Hauptformular. Der Windows Forms-designer generiert automatisch den nötigen Initialisierungscode für Sie.
Sollten Sie nicht erstellen Sie eine neue Instanz des Steuerelements in der Schaltfläche click-Ereignis-handler. Mit dem Designer-Konzept, um ein Steuerelement erstellen, können Sie einfach auf die vorhandene Instanz des Steuerelements wie folgt:
Was genau Sie meinen, wenn Sie sagen, dass die Immobilie wieder einen null-Wert? Ist es tatsächlich null, oder ist Ihre einfache MessageBox zeigt leer?
Ich schnell dupliziert den code und es verhält sich genau wie erwartet - die MessageBox zeigt, aber es ist leer, da der default-Wert der Eigenschaft Text des TextBox-Steuerelements wird eine leere Zeichenfolge.
Auch die Weise, wie Sie dies zu erreichen, ist ein wenig ungewöhnlich.
Erstens die Linie:
Sie in der Regel nicht brauchen, um die Instanzierung eines user-Kontrolle, wie dieser. Stattdessen können Sie ziehen Sie das Steuerelement aus der toolbox auf die Entwurfsoberfläche des Formulars. Dieser übernimmt dann die Instanziierung und Initialisierung Ihrer Kontrolle für Sie.
Ich denke, dass das ist eigentlich dein problem, wenn du die Codezeile oben, erstellen Sie eine neue Instanz des Benutzersteuerelements, und dies ist kein Weg, realted der Benutzer die Kontrolle, die Sie gezogen haben, auf die designer.
Wenn du gehst in die Entwurfsansicht des Formulars und klicken Sie auf das Benutzersteuerelement, sollten Sie sehen ein Fenster mit Eigenschaften somehere. Wenn nicht, dann entweder wählen Sie es aus dem Menü Ansicht, oder drücken Sie F4. In der Liste der Eigenschaften, dort sollte ein "Name" - dies ist die programatic Namen generiert, die für das Steuerelement. Sie können dies ändern Sie hier, wenn Sie wollen, aber wenn Sie finden dieses Steuerelement in den rest der form, das ist, was Sie verwenden müssen.
Zweitens, die nächsten zwei Zeilen:
Können Sie den Zugriff auf die Eigenschaft rtnTxtMake direkt. Es sei denn, Sie später zugreifen zu können, müssen die Make-string im rest des Codes dann direkt auf die Eigenschaft zugegriffen werden normalerweise als besser Stil.