Можно ли встраивать метаданные в Winform или элемент управления во время выполнения? - PullRequest
1 голос
/ 11 августа 2009

MS Access и VB имеют свойство Tag для формы и контроля, которые можно хранить во время выполнения и сохранять в приложении. Есть ли что-то эквивалентное в .NET?

Ответы [ 3 ]

3 голосов
/ 11 августа 2009

Большинство элементов управления пользовательского интерфейса в .NET имеют свойство .Tag, которое можно использовать для той же цели.

Однако, если вам нужны дополнительные функции, вы можете создать класс, который наследует от базового элемента управления (то есть вы можете создать класс с именем SpecialPictureBox , который наследует от PictureBox и добавляет дополнительные поля), и используйте его в своих Windows Forms так же, как вы можете использовать PictureBox.

1 голос
/ 11 августа 2009

В Windows Forms есть свойство Tag, но оно не сохраняется.

Шаблон, который я использую, заключается в создании класса с именем Preferences (имеет свойства для каждого элемента информации, который я хочу сохранить), который затем управляется с помощью класса PreferencesManager, такого как этот:

    public class PreferencesManager
{
    static private string dataPath = null;
    static public string DataPath
    {
        get
        {
            if (dataPath == null)
            {
                string baseFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                dataPath = Path.Combine(baseFolder, @"MY_APP_NAME");

                if (!Directory.Exists(dataPath))
                {
                    Directory.CreateDirectory(dataPath);
                }
            }

            return dataPath;
        }
    }

    /// <summary>
    /// Saves the specified preferences.
    /// </summary>
    /// <param name="pref">The preferences.</param>
    static public void Save(Preferences pref)
    {
        // Create file to save the data to

        string fn = "Preferences.xml";
        string path = Path.Combine(DataPath, fn);
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {

            // Create an XmlSerializer object to perform the serialization
            XmlSerializer xs = new XmlSerializer(typeof(Preferences));

            // Use the XmlSerializer object to serialize the data to the file
            xs.Serialize(fs, pref);
        }
    }

    static public Preferences Load()
    {
        Preferences ret = null;
        string path = string.Empty;

        try
        {
            // Open file to read the data from

            string fn = "Preferences.xml";
            path = Path.Combine(DataPath, fn);
            using (FileStream fs = new FileStream(path, FileMode.Open))
            {

                // Create an XmlSerializer object to perform the deserialization
                XmlSerializer xs = new XmlSerializer(typeof(Preferences));

                // Use the XmlSerializer object to deserialize the data from the file
                ret = (Preferences)xs.Deserialize(fs);
            }
        }
        catch (System.IO.DirectoryNotFoundException)
        {
            throw new Exception("Could not find the data directory '" + DataPath + "'");
        }
        catch (InvalidOperationException)
        {
            return new Preferences();
        }
        catch (System.IO.FileNotFoundException)
        {
            return new Preferences();
        }

        return ret;
    }

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