none
user-control Eigenschaften nicht auswählbar RRS feed

  • Frage

  • ich habe ein usercontrol geschrieben, dass mehrere öffentliche Eigenschaften hat.

    Füge ich das Control manuell in eine Form ein, kann ich über den Namen der Eigenschaft Werte im control ändern.

    Füge ich das Control aber dynamisch in mein Formular ein, sind diese Eigenschaften nicht auswählbar und somit nicht ansprechbar.

    Im folgenden Code erzeuge ich das control auf dem Formular.
     

    private void fillDocument()
    
    {
    
    	Control c = new LastAction.ucLastDocuments();
    
    	maxLastDocument_X = this.Width - c.Width - 10;
    
    	c.Location = new Point(maxLastDocument_X, maxLastDocument_Y);
    
    	maxLastDocument_Y += c.Height;
    
    	if (maxLastDocument_Y < this.Height)
    
    	{
    
    	Zahler += 1;
    
    	c.Name = "Test" + Zahler.ToString();
    
    	this.Controls.Add(c);
    
    	}
    
    }



    Test zur Änderung

    private void button10_Click(object sender, EventArgs e)
    
    {
    
    	foreach (Control tempCtrl in this.Controls)
    
    	{
    
    	if (tempCtrl.Name == "Test2")
    
    		{
    
    		// Wenn Control gefunden, Eigenschaft ändern
    
    		tempCtrl.EigeneEigenschaft = "TestName" 
    
    		//geht nicht, weil EigeneEgenschaft" nicht auswählbar ist 
    
    		}
    
    	}
    
    }


    Die Eigenschaft im Control ist folgender Massen angelegt:
    public String EigeneEigenschaft

    {

    get { return _Eigenschaft; }

    set { _Eigenschaft = value; }

    }


    Wie wäre es richtig?

    Gruß Rolf

    Montag, 4. April 2011 20:58

Antworten

  • Hallo Rolf,

    danke für die Antwort. Leider weiß ich nicht wie das gemeint ist. Ist ein eigenes usercontrol nicht ein control. Wo wird der Typ meines Controls definiert?

    Anstelle von:

      Control c = new LastAction.ucLastDocuments();

    schreibst Du bspw.:

      <TypDeinesControls> c = new LastAction.ucLastDocuments();

    wobei dann <TypDeinesControls> wohl "LastAction.ucLastDocuments" wäre, wenn ich das richtig interpretiere.

    Beim suchen deiner Controls und zuweisen der Eigenschaftenwerte dann wie bereits geschrieben:

      (<TypDeinesControls>)tempCtrl.EigeneEigenschaft = "TestName";

    Wie kann man in diesem Forum vernünftigen Text schreiben - meiner sieht irgendwie mißglückt aus?

    Eigentlich gar nicht. Manche Leute schaffen das über den Editor, manche nicht (inkl. mir^^)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 5. April 2011 07:11
    Moderator
  • Hallo Stefan,

    nun die letzte Frage zu diesem Thema.

    Ich spreche mein Control in der Schleife nun folgender Maßen an.

    ucLastDocuments xy = checked ((ucLastDocuments)tmpCtrl); 
     
    xy.Eigenschaft = Wert;

    Das funktioniert auch. Ist das eine empfehlenswerte Variante oder sollte man das eleganter/sicherer lösen?

    Rolf
    Mittwoch, 6. April 2011 16:20

Alle Antworten

  • Hallo Rolf,
     
    private void button10_Click(object sender, EventArgs e)
    {
     foreach (Control tempCtrl in this.Controls)
     {
      if (tempCtrl.Name == "Test2")
      {
       // Wenn Control gefunden, Eigenschaft ändern
       tempCtrl.EigeneEigenschaft = "TestName" 
       //geht nicht, weil EigeneEgenschaft" nicht auswählbar ist 
      }
     }
    }
    

    Die .NET eigene Klasse Control kennt diese Eigenschaft natürlich gar nicht. Du müsstest dann schon sowohl beim einfügen als auch beim zuweisen der Eigenschaftenwerte in deinen Typ casten, damit das funktionieren kann.

      (<TypDeinesControls>)tempCtrl.EigeneEigenschaft = "TestName"

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 4. April 2011 21:30
    Moderator
  • Hallo Stefan,

    danke für die Antwort. Leider weiß ich nicht wie das gemeint ist. Ist ein eigenes usercontrol nicht ein control. Wo wird der Typ meines Controls definiert?

    Wie kann man in diesem Forum vernünftigen Text schreiben - meiner sieht irgendwie mißglückt aus?

    Rolf

    Montag, 4. April 2011 21:45
  • Hallo Rolf,

    danke für die Antwort. Leider weiß ich nicht wie das gemeint ist. Ist ein eigenes usercontrol nicht ein control. Wo wird der Typ meines Controls definiert?

    Anstelle von:

      Control c = new LastAction.ucLastDocuments();

    schreibst Du bspw.:

      <TypDeinesControls> c = new LastAction.ucLastDocuments();

    wobei dann <TypDeinesControls> wohl "LastAction.ucLastDocuments" wäre, wenn ich das richtig interpretiere.

    Beim suchen deiner Controls und zuweisen der Eigenschaftenwerte dann wie bereits geschrieben:

      (<TypDeinesControls>)tempCtrl.EigeneEigenschaft = "TestName";

    Wie kann man in diesem Forum vernünftigen Text schreiben - meiner sieht irgendwie mißglückt aus?

    Eigentlich gar nicht. Manche Leute schaffen das über den Editor, manche nicht (inkl. mir^^)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 5. April 2011 07:11
    Moderator
  • Hallo Stefan,

    nun die letzte Frage zu diesem Thema.

    Ich spreche mein Control in der Schleife nun folgender Maßen an.

    ucLastDocuments xy = checked ((ucLastDocuments)tmpCtrl); 
     
    xy.Eigenschaft = Wert;

    Das funktioniert auch. Ist das eine empfehlenswerte Variante oder sollte man das eleganter/sicherer lösen?

    Rolf
    Mittwoch, 6. April 2011 16:20
  • Hallo Rolf,

    • Wie kann man in diesem Forum vernünftigen Text schreiben - meiner sieht irgendwie mißglückt aus?

    Aus Referenz: http://social.msdn.microsoft.com/Forums/de-DE/help#276

    Kann ich in den Foren in Antworten Code einfügen?
    Ja, Sie können in Antworten auf einen Beitrag Code einfügen. Klicken Sie dazu im Rich-Text-Editor auf das Symbol Codeblock einfügen, der nach Klicken auf Antworten angezeigt wird. Geben Sie den Code in das Dialogfeld Code kolorieren ein, klicken Sie in der Dropdownliste auf die Codesprache, und klicken Sie dann auf Einfügen.
    (in diesem Forum wählen wir dann oft C# als Codeformat)

    mal als Beispiel ... Dein Code sähe dann im Forum zum Beispiel so aus:

        private void fillDocument()
        {
          Control c = new LastAction.ucLastDocuments();
          maxLastDocument_X = this.Width - c.Width - 10;
    
          c.Location = new Point(maxLastDocument_X, maxLastDocument_Y);
          maxLastDocument_Y += c.Height;
          if (maxLastDocument_Y < this.Height)
          {
            Zahler += 1;
            c.Name = "Test" + Zahler.ToString();
            this.Controls.Add(c);
          }
        }
    
        private void button10_Click(object sender, EventArgs e)
        {
          foreach (Control tempCtrl in this.Controls)
          {
            if (tempCtrl.Name == "Test2")
            {
              // Wenn Control gefunden, Eigenschaft ändern
              tempCtrl.EigeneEigenschaft = "TestName";
              //geht nicht, weil EigeneEgenschaft" nicht auswählbar ist 
            }
          }
        }
    

    ciao Frank
    Mittwoch, 6. April 2011 16:42