Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заполнить TextBox'ы соотв. строками из файла? 
:(
    Опции темы
Cinot
  Дата 2.6.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Имеется форма с n-ым количеством TextBox'ов. Их Tags имеют вид "E01", "E02", "R01", "R13", "RD23" и т.д.
Имеется также файл, содержащий строки вида:

...
E01 Текст1
...
E02 Текст8
...
R01 Текст23
...
R13 Текст36
...
RD23 Текст52
...

Мне необходимо, чтобы при вызове формы все TextBox'ы заполнялись соответствующими их тегам строками (без первых символов, т.е. от первого пробела и до конца строки). Т.е. чтобы текст в TextBox'е выглядел так:

в TextBox[i] с тегом "E01" - текст "Текст1"
в TextBox[i] с тегом "R01" - текст "Текст23"
в TextBox[i] с тегом "RD23" - текст "Текст52"

Как я понимаю, надо открыть этот файл как-то вроде
Код

foreach (string item in File.ReadAllLines(filename))

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


Буду признателен за любой фрагмент кода для каждого из этапов этих операций, т.к. делаю первые шаги в освоении C#.
PM MAIL   Вверх
jonie
Дата 2.6.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



ну вот вам пример парсера (выдранный) - под ваши задачи подойдет.
Код

    class TxtParser
    {
        private string filename;
        public TxtParser(string filename)
        {
            if (!File.Exists(filename))
                throw new ArgumentException("File not found!", "filename");

            this.filename = filename;
        }

//ключем будет являться первое слово, значением - остаток строки без первого слова и разделителя (пробела)
        public IEnumerable<KeyValuePair<string, string>> GetItems()
        {
            using(Stream file = new FileStream(filename, FileMode.Open,FileAccess.Read)) 
            {
                using(TextReader sr = new StreamReader(file))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        int separatorPosition = line.IndexOf(' ');
                        string key = line.Substring(0, separatorPosition);
                        string value = line.Substring(separatorPosition + 1);
                        yield return new KeyValuePair<string, string>(key,value);
                    }
                }
            }
        }
    }




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cinot
  Дата 3.6.2010, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



jonie, спасибо за ответ! Подскажите, пожалуйста, где разместить этот код и как его использовать?
Код

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


    }

//здесь разместить представленный вами класс?

public class Commands
    {
        public Commands()
        {
        }

        public ResultBuffer GetLoadedAssemblies(ResultBuffer rb)
        {
           //Здесь заполнять TextBox'ы?
            Form1 dlg = new Form1();
            Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(dlg);
          //Или здесь, после открытия формы?

            ...
            return res;
        }

    }


Я не очень понимаю логики этого кода (класса). Как вызвать его метод (второй?) из другого класса, нужно ли подставлять туда значения как аргументы. Надо, наверно, как-то в цикле перебрать все TextBox[i].Tag, сопоставив их с первыми допробельными символами... Что-то я ещё больше запутался.
Отвлечённо от языка, это будет примерно так:
Код

 if (TxtParser.IEnumerable.key == Form1.TextBox[color=red][i][/color])
{
TextBox[i].Text = TxtParser.IEnumerable.value
}


Ну это примитивное описание того, что нужно примерно =)

Это сообщение отредактировал(а) Cinot - 3.6.2010, 09:08
PM MAIL   Вверх
jonie
Дата 3.6.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Cinot, ну можно и так где вы указали.... Это парсер текстового файла, использовать примерно так:
Код

var parser = new TxtParser("C:\\somefile.txt");
foreach(var item in parser.GetItems()) {
 string tag = item.Key;
 string value = item.Value;
 //а дальше ищите текстбокс по tag и ставьте ему value ....
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cinot
  Дата 3.6.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Вот такой вот код получился (нерабочий). Если вас не затруднит, ответьте, пожалуйста, на комментарии:

Код

public class Commands
    {
        public Commands()
        {
        }

        public ResultBuffer GetLoadedAssemblies(ResultBuffer rb)//Подскажите, как избавиться от возврата значения? оно мне не нужно!
        {

            Form1 dlg = new Form1();

            String filename = (Convert.ToString(val) + "\\sc_blocks.sc");//имя файла

//Ваш код:
            var parser = new TxtParser(filename);
            foreach (var item in parser.GetItems())
            {
                string tag = item.Key;
                string value = item.Value;

//Попытка поиска в цикле ТекстБокса с нужным тегом:

                foreach (Control c in dlg.Controls)
                {
                    TextBox cb = c as TextBox;
                    if (Convert.ToString(cb.Tag) == tag)
                    {
                        cb.Text = value;
                    }
                }

            }
        
             Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(dlg);//Открытие формы

//Ненужная часть, возвращаемое значение - не могу грамотно это удалить (возвращаемое значение не нужно!):
                ResultBuffer res = new ResultBuffer();
                string version = "";
                res.Add(new TypedValue((int)LispDataType.Text, version));
                return res;

            }

        }

что приводит к фатальной ошибке =)

Что я делаю не так?

Это сообщение отредактировал(а) Cinot - 3.6.2010, 15:15
PM MAIL   Вверх
jonie
Дата 3.6.2010, 15:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Cinot, изучите сначала основы C#, и не парьте нам мозг чужими исходниками


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cinot
Дата 3.6.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Цитата

изучите сначала основы C#, и не парьте нам мозг чужими исходниками

Во-первых, это не чужие исходники, а мой код с вкраплениями вашего и вопросами в комментариях. А во-вторых, это форум, как я понимаю, не для обсуждения своих профессиональных программ, а как раз для подобных простых вопросов, хотя и не только простых.
Если вам больше нечего сказать в ответ на вопросы, я могу рассчитывать на помощь других людей, для которых ответы на подобные вопросы просты и очевидны.

Это сообщение отредактировал(а) Cinot - 3.6.2010, 16:21
PM MAIL   Вверх
jonie
Дата 3.6.2010, 17:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



я не верю что это ваши исходники и вы их писали. Если бы было так, то вы б не задали вопрос из первой главы любой книги по C#:
Цитата

Код

        public ResultBuffer GetLoadedAssemblies(ResultBuffer rb)//Подскажите, как избавиться от возврата значения? оно мне не нужно!


Цитата

Код

                    TextBox cb = c as TextBox;
                    if (null!=cb  && Convert.ToString(cb.Tag) == tag)  //надо проверять на null




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cinot
Дата 3.6.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Цитата

я не верю что это ваши исходники и вы их писали

Да там всего чистого кода несколько строк! Естественно, я подглядывал в книги, Интернет для их написания, брал по несколько строк из примеров и редактировал их, если это получалось. Я не спорю, что мало знаю язык - собственно, это и не скрывалось, и именно по этой причине была создана тема. За вашу помощь - спасибо; смысла же увещеваний я не понимаю.
P.S. Ко всему прочему, я попросил кидать кусочки кода, чтобы в них по-тихоньку разбираться. Что вы и сделали. Моей ошибкой было, видимо, задать "лишние" вопросы отвечающему.

Это сообщение отредактировал(а) Cinot - 3.6.2010, 18:32
PM MAIL   Вверх
Exai1e
Дата 3.6.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Cinot
Цитата

//Подскажите, как избавиться от возврата значения? оно мне не нужно!

Код

public void ....


Cinot
Цитата(Cinot @  3.6.2010,  18:29 Найти цитируемый пост)
Естественно, я подглядывал в книги, Интернет для их написания, брал по несколько строк из примеров и редактировал их, если это получалось. Я не спорю, что мало знаю язык - собственно, это и не скрывалось, и именно по этой причине была создана тема. 


и для начала лучше не "брать несколько строк из книги/интернета/etc" а прочитать умную книжку по C#, тогда будет намного проще, даже когда "взял оттуда, запихнул сюда, не работает бла бла бла"

Это сообщение отредактировал(а) Exai1e - 3.6.2010, 19:53


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.