Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 26

Создание цикла с двумя TextBox

05.11.2015, 21:53. Показов 1943. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код, уверен, что он кривоват, т.к. новичок.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HtmlAgilityPack;
using System.Text.RegularExpressions;
 
 
namespace Instagram_Loock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        { }            
        
            
        public string GET_http(string url)
        {
            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            System.Net.WebRequest reqGET = System.Net.WebRequest.Create(url);
            System.Net.WebResponse resp = reqGET.GetResponse();
            System.IO.Stream stream = resp.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream);
            string html = sr.ReadToEnd();
            return html;
        }        
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < textBox1.Lines.Length; ++i)
            {
                // Перехожу на страницу пользователя
                string html = GET_http("https://instagram.com/" + textBox1.Lines[i]);
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(html);
                // Проверяю наличие "likes" на сайте
                string pattern = @"(likes)";
                string text = html;
                Regex newReg = new Regex(pattern);
                MatchCollection matches = newReg.Matches(text);
                foreach (Match mat in matches)
                {
                    if (mat.Value == "likes")
                    {
//////////////////////////////////////////////////////////////////////////////
// тут происходит ошибка - Индекс находился вне границ массива.
//////////////////////////////////////////////////////////////////////////////
                        textBox2.Lines[i] = textBox1.Lines[i];
                    }
                    else
                    {
                        
                    }
                }
            }
        }
    }
}
Сама программа работает, если работать с одной строкой, но как правильно реализовать цикл не знаю.
Нужно, чтобы после проверки строки из textbox1, она заносилась в textbox2, если соответствует условию(наличие слова "likes" в коде сайта) и так с каждой строкой из textbox1.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2015, 21:53
Ответы с готовыми решениями:

Создание цикла для "Пятнашек". Увеличить количество TextBox
Как дописать код для создания 6 textBox занимающих всю форму,а не 3х ,как сейчас???:wall: private void button1_Click(object sender,...

Удаление дублей между двумя textbox
Есть два текст бокса нужно удалить дубли из текст бокса 1 и 2 сравнить 1 тб и 2тб- результат оставить в тб2 пример : текст бокс...

Повтор цикла по числу в TextBox
Как сделать так,чтобы цикл выполнялся несколько раз при условии ввода некоторого числа в TextBox?Если в TextBox'е число 1,то выполнить 1...

9
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
05.11.2015, 23:51
NakLer, если вам нужен только поиск слова "Likes", то использовать HtmlAgilityPack не особо и нужно, как и для большинства других действий с текстом html страницы. Просто лишний груз к вашей программе. А ошибка, скорее всего, выскакивает потому, что textBox2 - изначально пустой, а вы пытаетесь обращаться к несуществующей строке в нём. Исправляется вот так:
C#
1
textBox2.Lines = new string[textBox1.Lines.Length];
Эту строку поместить в самом начале button1_Click, перед циклом.
Но я бы реализовал это вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            textBox2.Lines = new string[textBox1.Lines.Length];
            int i = 0;
            foreach(string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if(GET_http("https://instagram.com/" + ln).Contains("likes"))
                    textBox2.Lines[i] = ln;
                else
                {
                    ///Чтонибудь...
                }
 
                i++;
            }
0
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 26
06.11.2015, 18:46  [ТС]
Захарка,
Что-то не пошло... В текстбокс ничего так и не дабавляется
Строки появились, но они не заполняются

Добавлено через 38 минут
Захарка, при таком коде у меня выводятся messbox, а текста в текстбоксах нет
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
textBox2.Lines = new string[textBox1.Lines.Length];
            int i = 0;
            foreach (string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if (Get_HTML("https://instagram.com/" + ln).Contains("likes"))
                {
                    
                    textBox2.Lines[i] = ln;
                    MessageBox.Show("+");
                }
                else
                {
                    MessageBox.Show("-");
                }
 
                i++;
            }
            MessageBox.Show("all");
0
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
06.11.2015, 22:22
NakLer, да, чёт странное - напрямую Lines присваивать нельзя... Вот так тогда:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            string[] outLns = new string[textBox1.Lines.Length];
            
            int i = 0;
            foreach (string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if (GET_http("https://instagram.com/" + ln).Contains("likes"))
                    outLns[i] = ln;
                else
                {
                    ///Чтонибудь...
                }
 
                i++;
            }
            textBox2.Lines = outLns;
0
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 26
06.11.2015, 22:40  [ТС]
Захарка, во теперь работает, ео выводит строки не поочередно, а через некоторое время все сразу. И еще как решить в данном цикле проблему, если ошибка 404( Удаленный сервер возвратил ошибку: (404) Не найден.)
0
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
06.11.2015, 22:48
Игнор ошибки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public string GET_http(string url)
        {
            string html = "";
            try
            {
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                System.Net.WebRequest reqGET = System.Net.WebRequest.Create(url);
                System.Net.WebResponse resp = reqGET.GetResponse();
                System.IO.Stream stream = resp.GetResponseStream();
                System.IO.StreamReader sr = new System.IO.StreamReader(stream);
                html = sr.ReadToEnd();
            }
            catch { }
 
            return html;
        }
В случае 404 будет возвращать пустую строку. Можно ещё на это обработчик прицепить, типа, если длинна строки = 0, то вывести, что такой страницы нету.
Чтобы типа поочерёдно выводилось, можно присвоение
C#
1
textBox2.Lines = outLns;
в цикл запихнуть, тогда строки будут появляться, по мере загрузки.
1
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 26
06.11.2015, 23:24  [ТС]
Я же правильно понял? Только все равно выводится в конце. С 404 разобрался
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
foreach (string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if (GET_http("https://instagram.com/" + ln).Contains("likes"))
                {
                    outLns[i] = ln;
                    textBox2.Lines = outLns;                   
                }
                else
                {
                    ///Чтонибудь...
                }
                
                i++;
            }
0
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
07.11.2015, 00:18
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
             foreach (string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if (GET_http("https://instagram.com/" + ln).Contains("likes"))
                {
                    outLns[i] = ln;               
                }
                else
                {
                    ///Чтонибудь...
                }
                
                i++; 
                textBox2.Lines = outLns;               
                textBox2.Refresh();  
            }
Попробуй так.
1
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 26
07.11.2015, 15:56  [ТС]
Захарка, Сейчас всё отлично работает
Но может для красоты подскажешь, как:
1) Чтобы при добавлении нового значения в textbox2, textbox2 автоматически прокручивался вниз.
2) Есть пустые строки, как на их место поставить последующие значения, чтобы не было их.
3) Когда запускаю программу, она работает, но ее нельзя перетащить или выключить до завершения решения.
0
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
07.11.2015, 17:59
Лучший ответ Сообщение было отмечено NakLer как решение

Решение

Сначала хотел просто ответить что именно делать, но потом стало лень, и я кидаю готовый код, который делает всё так, как ты написал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        private void addLine(string text)
        {
            textBox2.Text = textBox2.Text.Insert(textBox2.Text.Length, ((textBox2.TextLength > 0) ? "\r\n" : "") + text);
 
            ///ставим выделение текстового поля в самый низ
            textBox2.SelectionStart = textBox2.Text.Length;
            textBox2.ScrollToCaret();
        }
 
        private void printToTextBoxes()
        {
            string[] outLns = new string[textBox1.Lines.Length];            
            foreach (string ln in textBox1.Lines)
            {
                // Перехожу на страницу пользователя
                if (GET_http("https://instagram.com/" + ln).Contains("likes"))
                    this.BeginInvoke(new Action(delegate() {
                        ///Выполняем это в основном потоке
                        addLine(ln);
                    }));                
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            ///очищаем текстовое поле
            textBox2.Text = "";
            ///Запускаем проверку в новом потоке
            Thread Th = new Thread(new ThreadStart(printToTextBoxes));
            Th.Start();
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2015, 17:59
Помогаю со студенческими работами здесь

Отображение движения цикла в textbox
прошу помочь в проблеме с С#. Есть реализация на С++. void CperemehenieDlg::OnBnClickedButton1() { KeyPressed = true; for(int y...

В момент работы цикла не обновляется значение TextBox
Доброго времени суток. Почему-то не получается организовать вывод в форму текстового значения, из постоянно меняющейся переменной f, с...

В TextBox попадают данные только последней итерации цикла
Вот часть кода, по нажатию на кнопку должно записывать все в TextBox но выводит только последнюю итерацию, и только после того как событие...

Создать двумерный массив в диапазоне чисел, который задается двумя textbox
На форме (полноэкранной) создаетcя массив текстовых полей (20x15) в которых будут отображаться элементы массива. Массив заполняется...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru