Как мне установить размер окна из раздела реестра в C #? - PullRequest
0 голосов
/ 03 января 2011

Я пытаюсь сделать так, чтобы, когда мое приложение C # закрывалось, оно сохраняло размер окна и местоположение в реестре, а затем при запуске оно меняло окно на эти размеры. Я получаю сообщение об ошибке при попытке сделать это следующим образом:

        Microsoft.Win32.RegistryKey key;
        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Pandora");
        //key.SetValue("Size", this.Size);
        //key.SetValue("Location", this.Location);
        //key.SetValue("Browser", Browser.Location);
        this.Size = new System.Drawing.Size(key.GetValue("Size").ToString());
        key.Close();

Что мне нужно сделать, чтобы установить this.size в значение "Size"?

== EDIT ==

С

this.Size = new System.Drawing.Size(key.GetValue("Size").ToString(), Microsoft.Win32.RegistryValueKind.String);

Я получаю ошибки:

Ошибка 1 Лучший перегруженный метод соответствовать 'System.Drawing.Size.Size (int, int)' имеет некоторые недействительные аргументы C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 25 Пандора

Ошибка 2, аргумент 1: невозможно преобразовать от «строки» до 'int' C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 49 Пандора

Ошибка 3, аргумент 2: невозможно преобразовать от "Microsoft.Win32.RegistryValueKind" для 'int' C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 82 Пандора

Если я поменяю его на:

this.Size = new System.Drawing.Size(key.GetValue("Size").ToString());

Результат

Ошибка 1 Лучший перегруженный метод соответствовать 'System.Drawing.Size.Size (System.Drawing.Point)' имеет некоторые недействительные аргументы C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 25 Пандора

Ошибка 2 Аргумент 1: невозможно преобразовать от «строки» до 'System.Drawing.Point' C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 49 Пандора

И

this.Size = new System.Drawing.Size(key.GetValue("Size"));

дает мне

Ошибка 1 Лучший перегруженный метод соответствовать 'System.Drawing.Size.Size (System.Drawing.Point)' имеет некоторые недействительные аргументы C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 25 Пандора

Ошибка 2, аргумент 1: невозможно преобразовать от «объекта» до 'System.Drawing.Point' C: \ Users \ Sean \ Documents \ Visual студия 2010 \ Проекты \ Пандора \ Пандора \ Form1.cs 23 49 Пандора

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Я согласен, что использование Реестра - не лучшая идея.Тем не менее, вы можете рассмотреть возможность разделения ширины и высоты, а не пытаться сохранить тип «Размер»

Size size = this.Size;
int width = size.Width;
int height = size.Height;
// Now store "width" and "height" in their own key...
// ...
// ...
key.SetValue("SizeWidth", width.ToString(), Microsoft.Win32.RegistryValueKind.String);
key.SetValue("SizeHeight", height.ToString(), Microsoft.Win32.RegistryValueKind.String);

Кроме того, какую ошибку вы получаете конкретно?

1 голос
/ 03 января 2011

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

Например: если бы значение в реестре было «30500», имело бы смысл сказать следующее:

this.Size = 3500;

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

Когда вы извлекаете значения, вам нужно будет их проанализировать, так как «Размер» требует двух целыхне две строки.Попробуйте что-то вроде:

string sHeight = key.GetValue("SizeHeight");
string sWidth  = key.GetValue("SizeWidth");
int iHeight    = Int32.Parse(sHeight);
int iWidth     = Int32.Parse(sWidth);
Size size      = new Size(iWidth, iHeight);
this.Size      = size;

Возможно, вам придется внести несколько корректировок в код, но это хорошее место для начала.

0 голосов
/ 06 октября 2012

Использование :

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