Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Считать с текстбокса


Автор: dzjundzja88 2.3.2011, 17:07
Создаю динамически 10 текстбоксов
Код

                for (int i = 0; i < 10; i++)
                {
                    TextBox TextB = new TextBox();
                    TextB.Name = "TextB" + Convert.ToString(i + 1); 
                    TextB.Parent = this.MF_in_Panel;
                    TextB.Location = new Point(5 + CheckB.Size.Width + 18, 10 + 30 * i); 
                    TextB.Validating += new CancelEventHandler(this.TextBValidating);
                    TextB.Enabled = true; //knopka aktivna
                 }


Как мне теперь считать со всех текстбоксов (допустим тоже в цикле)? Это я просто написал в цикле 10, а вообще я заранее не знаю сколько их будет. 

Автор: dj100500 2.3.2011, 17:59
ну загони их в List<TextBox>
а потом в цикле пройди
foreach (TextBox t in MyBoxes)
            {
                MessageBox.Show(t.Text);
            }

Автор: puZzo 2.3.2011, 20:12
Я тоже с подобным работал, делал как предложил dj100500, но меня интересовало, да и интересует, а как обратиться к объекту, заведомо не зная его имени? В Delphi давненько делал каким-то макаром подставляя вместо имени string, содержащий имя объекта..

Автор: Экскалупатор 2.3.2011, 21:03
puZzo, ты знаешь что происходит в этой строке?
Код

TextBox TextB = new TextBox();


для чего тебе имя? у тебя есть какие то объекты, и есть ссылки на эти объекты, вот по ним и обращайся, грубо говоря, эти текстбоксы надо добавить в какую то коллекцию и потом обращаться к ним через эту коллекцию.

з.ы. только боюсь все твои тексбоксы после окончания цикла будут уничтожены, если ты все оставишь так как оно описано сейчас и не передашь ссылки на текстбоксы какой то переменной которая будет находится в другой области видимости(там где ее будут использовать). почитай про области видимости и про то что такое классы и как с ними работать.

Автор: puZzo 3.3.2011, 05:45
Экскалупатор, Создается экземпляр класса TextBox, а точнее ссылка на этот экземпляр, new выделяет память, а TextBox() конструктор того самого класса?

как я делал в Delphi:
Код
(Form1.FindComponent('label1') as TLabel).Text := 'Найденный с помощью FindComponent() контрол';


а это то, что мне интересно было в .NET и в принципе может быть реализовано в реальных приложениях, когда не нужно делать много контролов.
Код
this.Controls.Find("label1", false)[0].Text = "Найденный с помощью Controls.Find() контрол";


з.ы.: у меня в дипломе был один момент, когда нужно было к контролам обращаться именно таким способом.

dzjundzja88, а тебе действительно нужно делать коллекцию

Автор: Экскалупатор 3.3.2011, 08:34
puZzo, так в чем проблема? делай коллекцию текстбоксов, при создании текстбокса присваивай имена и ищи по коллекции(будет даже быстрее и проще чем искать в коллекции всех контролов). можно еще создать коллекцию имен если уж так надо. по сути Controls это и есть коллекция, можно добавлять прямо в нее, потом делать коллекцию имен и по этим именам искать. просто если сделать отдельную коллекцию по своим контролам то круг поиска существенно сузится.

Автор: puZzo 3.3.2011, 11:52
да это то все понятно, просто вставал у меня когда-то такой вопрос, ну вот и решение нашлось) а коллекции то я давно использую для этих целей;-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)