Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Kann mir einer sagen wie ich folgenden Code in eine while schleife reinbekomme und die Controls mit dynamischen Namen lade?


if (produkt_1.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_1.Text, preis_1.Text, rb_zahlung.Text, 1);

            }

            if (produkt_2.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_2.Text, preis_2.Text, rb_zahlung.Text, 2);

            }

            if (produkt_3.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_3.Text, preis_3.Text, rb_zahlung.Text, 3);

            }

            if (produkt_4.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_4.Text, preis_4.Text, rb_zahlung.Text, 4);

            }

            if (produkt_5.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_5.Text, preis_5.Text, rb_zahlung.Text, 5);

            }

            if (produkt_6.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_6.Text, preis_6.Text, rb_zahlung.Text, 6);

            }

            if (produkt_7.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_7.Text, preis_7.Text, rb_zahlung.Text, 7);

            }

            if (produkt_8.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_8.Text, preis_8.Text, rb_zahlung.Text, 8);

            }

            if (produkt_9.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_9.Text, preis_9.Text, rb_zahlung.Text, 9);

            }

            if (produkt_10.Text != "")

            {

                bestellposten_hinzufuegen(sCurrentUser, produkt_10.Text, preis_10.Text, rb_zahlung.Text, 10);

            }

Vielen Dank im vorraus,

Gruß,

Kworth

Ich würde behaupten, dass dies ein klassischer Fall für Arrays bzw. Collections ist.

Allerdings sind die Informationen bisschen mau. Ich schätze jetzt einfach mal, dass das alles Textboxen sind.

In dem Fall erstellst du am besten zur Laufzeit des Programms diese Textbox-Objekte, speicherst sie in einer Collection und zeigst diese auf deiner Form an.

Zur Auswertung überprüfst du jedes Element der Collection mittels einer Schleife.

Eine detailliertere Lösung knobelst du am besten auf Basis dieses Ansatzes selbst aus, oder du gibst uns mehr Input ;)

Gruß, Sturm

Ich habe da ne Lösung ist aber nicht grad die sauberste

Gruß Hans-Jörg

(Achtung VB.NET Code)


Dim alFelder as new ArrayList

Dim inZaehler as Integer


alFelder.Add(produkt_1)

alFelder.Add(produkt_2)

alFelder.Add(produkt_3)

usw. usw.

alFelderPreis.Add(preis_1)

alFelderPreis.Add(preis_2)

alFelderPreis.Add(preis_3)

usw. usw.


For inZaehler = 0 to alFelder.Count -1

    IF  NOT alFelder(inZaehler).Text = "" then

       bestellposten_hinzufuegen(sCurrentUser, alFelder(inZaehler).Text, alFelderPreis(inZaehler).Text, rb_zahlung.Text, 2)

    END IF

Next

Ich würde behaupten, dass dies ein klassischer Fall für Arrays bzw. Collections ist.

Allerdings sind die Informationen bisschen mau. Ich schätze jetzt einfach mal, dass das alles Textboxen sind.

In dem Fall erstellst du am besten zur Laufzeit des Programms diese Textbox-Objekte, speicherst sie in einer Collection und zeigst diese auf deiner Form an.

Zur Auswertung überprüfst du jedes Element der Collection mittels einer Schleife.

Eine detailliertere Lösung knobelst du am besten auf Basis dieses Ansatzes selbst aus, oder du gibst uns mehr Input ;)

Gruß, Sturm

Danke für die Antwort.

Ich würde gern mein bestehendes Formular verwenden und ich dachte ich könnte irgendwie dynamisch diese Textfelder ansprechen.

Über "get Control by Name" oder so ähnlich?

eventuell hilft dir folgender kleiner Anhaltspunkt:


foreach( Textbox tb in this.Controls)

{

     string textboxtext = tb.Text.ToString();

}

das "this.Controls" kann auch anderes aussehen. Kommt halt drauf an, wo die Textboxen drin sind...

Hoffe das hilft...

Welches Framework benutzt Du?

eventuell hilft dir folgender kleiner Anhaltspunkt:


foreach( Textbox tb in this.Controls)

{

     string textboxtext = tb.Text.ToString();

}

das "this.Controls" kann auch anderes aussehen. Kommt halt drauf an, wo die Textboxen drin sind...

Hoffe das hilft...

Leider sind nicht nur Textboxen vorhanden sondern auch ein Literal,

daher spukt er mir ein Error aus, dass er das Literal nicht umwandeln kann in eine Textbox.

Aber ich glaub das ist die richtige Spur, ich müsste jetzt nur noch die Textboxen rausfiltern aus allen Controls.

Framework ist

Microsoft Visual Studio 2008

Bearbeitet von Kworth

Microsoft Visual Studio 2008 ist eine IDE, kein Framework.

Welche .NET-Version benutzt DU? .NET 1.1/2.0/3.0/3.5?

Btw: für 2.0


      foreach (Object item in this.Controls)

      {

        if (item is TextBox)

        {

          if ((item as TextBox).Text != String.Empty)

          {

            //Hier weiter verarbeiten

          }

        }

      }

Bearbeitet von Byteloser

Nein, bei VS 2008 kannst Du zwischen den 3 Versionen auswählen.

Btw: für 2.0


      foreach (Object item in this.Controls)

      {

        if [COLOR="Red"](item is TextBox)[/COLOR]

        {

          if ((item as TextBox).Text != String.Empty)

          {

            //Hier weiter verarbeiten

          }

        }

      }

Funktioniert das Rote so??? Müsste des ned eher
if( item.GetType() == typeof(TextBox))

lauten???

Probier es doch aus. :-)

Weil der Entwickler nicht immer bestimmen kann, das bestimmte Voraussetzungen auf den Zielclient erfüllt werden müssen.

Bei mittelständischen und Grossunternehmen werden oft die Versionen von deren IT diktiert.

Aber zurück zum Thread. :-)

Für 3.5 kannst du das wunderbar mit Linq erledigen:


      var query = this.Controls.OfType<TextBox>().Where(x => x.Text != String.Empty);


      foreach (var item in query)

      {

        //weiter verarbeitem

      }


Vielen Dank für eure Hilfe,

habe nun folgenden Code:


foreach (Control tb in this.Controls)

            {

                if (tb is TextBox)

                {

                    TextBox tb1 = ((TextBox)tb);


                    //WENN FELD IST GLEICH PREISFELD

                    if (tb1.Width == 50)

                    {

                        if (tb1.Text != "")

                        {

                          bestellposten_hinzufuegen(sCurrentUser, tb2.Text, tb1.Text, rb_zahlung.Text, iCounter);

                        }

                        iCounter++;

                    }

                    //FELD IST GLEICH PRODUKTFELD

                    tb2 = ((TextBox)tb);

                }

            }

Dieser funktioniert für mein Teilproblem das ich beschrieben habe wunderbar, allerdings nur weil die 2 Felder immer hintereinander liegen und eine unterschiedliche Width haben woran ich sie erkennen kann. Das Framework ist übrigens 3.5. Ich komme nun noch zu Teilproblem B) wo es sich nicht so einfach verhält.

            if (Request.Form["produkt_4"] != null || Request.Form["preis_4"] != null)

            {

                produkt_4.Visible = true;

                preis_4.Visible = true;

                lb_euro_4.Visible = true;

                lb_empty_4.Visible = true;


                produkt_4.Text = Request.Form["produkt_4"];

                preis_4.Text = Request.Form["preis_4"];


                lt_addInput.Text = "5";

            }

            if (Request.Form["produkt_5"] != null || Request.Form["preis_5"] != null)

            {

                produkt_5.Visible = true;

                preis_5.Visible = true;

                lb_euro_5.Visible = true;

                lb_empty_5.Visible = true;


                produkt_5.Text = Request.Form["produkt_5"];

                preis_5.Text = Request.Form["preis_5"];


                lt_addInput.Text = "6";

            }

            if (Request.Form["produkt_6"] != null || Request.Form["preis_6"] != null)

            {

                produkt_6.Visible = true;

                preis_6.Visible = true;

                lb_euro_6.Visible = true;

                lb_empty_6.Visible = true;


                produkt_6.Text = Request.Form["produkt_6"];

                preis_6.Text = Request.Form["preis_6"];


                lt_addInput.Text = "7";

            }

            if (Request.Form["produkt_7"] != null || Request.Form["preis_7"] != null)

            {

                produkt_7.Visible = true;

                preis_7.Visible = true;

                lb_euro_7.Visible = true;

                lb_empty_7.Visible = true;


                produkt_7.Text = Request.Form["produkt_7"];

                preis_7.Text = Request.Form["preis_7"];


                lt_addInput.Text = "8";

            }

            if (Request.Form["produtk_8"] != null || Request.Form["preis_8"] != null)

            {

                produkt_8.Visible = true;

                preis_8.Visible = true;

                lb_euro_8.Visible = true;

                lb_empty_8.Visible = true;


                produkt_8.Text = Request.Form["produkt_8"];

                preis_8.Text = Request.Form["preis_8"];


                lt_addInput.Text = "9";

            }

            if (Request.Form["produkt_9"] != null || Request.Form["preis_9"] != null)

            {

                produkt_9.Visible = true;

                preis_9.Visible = true;

                lb_euro_9.Visible = true;

                lb_empty_9.Visible = true;


                produkt_9.Text = Request.Form["produkt_9"];

                preis_9.Text = Request.Form["preis_9"];


                lt_addInput.Text = "10";

            }

            if (Request.Form["produkt_10"] != null || Request.Form["preis_10"] != null)

            {

                produkt_10.Visible = true;

                preis_10.Visible = true;

                lb_euro_10.Visible = true;

                lb_empty_10.Visible = true;


                produkt_10.Text = Request.Form["produkt_10"];

                preis_10.Text = Request.Form["preis_10"];


                lt_addInput.Text = "11";

            }


Diesen Code möchte ich nun verkürzen, und nun muss ich wirklich irgendwie per Name ansprechen können. lb_euro, lb_empty sind Labels. Produkt und Preis sind textboxen lt_addInput ist ein Literal. ich würde am liebsten sowas ähnliches machen

for(int i=0; i<=10; i++)

{

  string produktfeldname = "produkt_" + i;

  produktfeldname.Visible = true;

  ...

}

Wäre dankbar wenn ihr mir auch hier helfen würdet eine Lösung zu finden

Ich würde gerne mein Control per name ansprechen:

Folgender Code habe ich hierfür gefunden:


Control GetControlByName(string Name)

{

    foreach(Control c in this.Controls)

        if(c.Name == Name)

            return c;


    return null;

}

Allerdings kennt mein VisualStudio 2008 mit Framework 3.5 "c.Name" nicht.

Woran kann das liegen?

Oder hat jemand eine ähnliche Lösung für das Problem ohne "c.Name".

Das c.Name klappt nicht, weil das bei Controls nicht geht. Wenn du den Namen haben willst musst du es vorher in einen bestimmten Typ umwandeln/auf einen Typ vergleichen:

z.B:

 ((Button)c).Name

Das sollte dann funktionieren.

Würd halt vorher noch ne prüfung machen ob es sich bei dem control um nen Button handelt

Ich denke ich muss über die ID gehen und nicht über den Namen

Habe nun folgenden Code der noch nicht funktioniert


        Control GetControlById(string Name)

        {

            Control c_return = new Control();


            foreach (Control c in this.Controls)

            {

                    if (c.ID == Name)

                    {

                        c_return = c;

                    }


            }


            return c_return;

        }


            for (int iCounter2 = 4; iCounter2 <= 10; iCounter2++)

            {

                string sProdukt_Field_Name = "produkt_" + iCounter2;

                string sPreis_Field_Name = "preis_" + iCounter2;

                string sEuro_Field_Name = "lb_euro_" + iCounter2;

                string sEmpty_Field_Name = "lb_empty_" + iCounter2;


                if (Request.Form[sProdukt_Field_Name] != null || Request.Form[sPreis_Field_Name] != null)

                {

                    GetControlById(sProdukt_Field_Name).Visible = true;

                    GetControlById(sPreis_Field_Name).Visible = true;

                    GetControlById(sEuro_Field_Name).Visible = true;

                    GetControlById(sEmpty_Field_Name).Visible = true;


                    ((TextBox)GetControlById(sProdukt_Field_Name)).Text = Request.Form[sProdukt_Field_Name];

                    ((TextBox)GetControlById(sPreis_Field_Name)).Text = Request.Form[sPreis_Field_Name];


                    lt_addInput.Text = Convert.ToString((iCounter2+1));

                }

            }


Ich bekomme keine Fehlermeldung, allerdings tut der Code immer noch nicht dass was der längere Code vorher tut, warum auch immer.

Hoffe ihr findet den Fehler.

Danke nochmals


private Control[] GetControlsByName(string name)

{

    return Controls.Find(name, true);

}

EDIT: Ach so, es geht hier um System.Web.UI.Control :roll:

Bearbeitet von 0815FIA

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.