Сохранение и загрузка TextBox или других управляющих значений в текстовом файле. - PullRequest
3 голосов
/ 29 ноября 2011

Я знаю, что это можно сделать с помощью настроек приложения, но я хочу сделать это следующим образом:

У меня есть некоторые текстовые поля и другие элементы управления, которые имеют свойство Text.Я делаю цикл и сохраняю их свойства Name и Text в текстовом файле.Заявление о сохранении выглядит следующим образом:

if (ctrl != null) sb.AppendLine(ctrl.Name.ToString() + ":" + ctrl.Text);

Когда я хочу загрузить их обратно, я хочу сделать это таким образом, но, поскольку я не могу указать на имя элементов управления, я застрял!(Я полагаю, что в PHP можно было указывать на переменную, используя другие переменные!)

using (StreamReader file = new StreamReader(ofile.FileName))
{
        while((line = file.ReadLine()) != null)
        {
            if (line.StartsWith("#")) continue; //Line is a commment so skip
            else
            {
                data = line.Split(':');
                //How to set back the text property to the variable?
            }
        }
}

Теперь я хочу сохранить свойство элементов управления Tag вместо свойства Name theire,Но проблема в том, что все мои элементы управления разбросаны по боковым вложенным панелям и тому подобному, поэтому мне приходится много делать LOOPING!сравнить их теги с тегами, доступными в моем сохраненном файле (обратите внимание, что я не собираюсь сохранять все элементы управления в текстовом файле, только некоторые из них!)

Что делать?

Ответы [ 3 ]

4 голосов
/ 29 ноября 2011

Вы можете найти элемент управления по его имени, если у вас есть доступ к свойству Controls формы

  var textBox = yourForm.Controls.Find("name", true) as TextBox;
  if(textBox != null)
       textBox.Text = "text"; 
1 голос
/ 29 ноября 2011

Ваш вопрос неясен. Я понимаю, что вы хотите записать текстовое свойство в текстовый файл, а затем восстановить его через текстовый файл, если это так, то это простое решение [в Winform]

для сохранения используйте формат control-name: text позже при загрузке используйте

this.Controls[<controlname>].Text=Text

т.е. в вашем контексте

while((line = file.ReadLine()) != null)
    {
        if (line.StartsWith("#")) continue; //Line is a commment so skip
        else
        {
           string[] data = line.Split(':');
          if(data.Length>0)
          {
            if(this.Controls.ContainsKey(data[0]))
            {
              if(this.Controls[data[0]] is TextBox)
             {
               //generic 
             // this.Controls[data[0]].Text=data[1];
                //or use
                ((TextBox) this.Controls[data[0]]).Text=data[1];
             }
            }
          }
        }
    }

обратите внимание, что this.Controls возвращает объект управления, если вы хотите выполнить какие-либо конкретные операции, введите Cast и затем примените Также, если вы пытаетесь получить доступ к

Надеюсь, это поможет.

1 голос
/ 29 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...