Другие языки программирования и технологии

как в C# используя Windows Forms Application, запомнить положение, рабочего окна приложения, на рабочем столе?

учусь программировать на C#, создал что-то вроде виджета часов, как сделать чтобы при запуске программы она запускалась в том месте экрана в котором ее выключили? то есть чтобы программа запоминала свои координаты и потом с ними запускалась.
Лови, для тебя старался - http://narod.ru/disk/1291451001/WinForms_FormPosition.rar.html
Способ предложенный выше не нравится тем, что если приложение переместить в другую папку, то старые настройки будут утеряны. А мой способ всегда со мной. И можно сделать сколько угодно настроек в приложении таким способом. И получить к ним доступ из любой части программы. Так же можешь создать класс, который будет хранить пути к необходимым папкам, файлам. Типа как константы и тогда никогда не запутаешься.

Вот только самая поверхностная часть кода, весь код в проекте:

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

private void FormMain_Load(object sender, EventArgs e)
{
GlobalSettings.Load();
this.Location = GlobalSettings.appSettings.MainWindowPosition;
this.Size = GlobalSettings.appSettings.MainWindowsSize;
}

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
GlobalSettings.Save();
}

private void FormMain_LocationChanged(object sender, EventArgs e)
{
GlobalSettings.appSettings.MainWindowPosition = this.Location;
}

private void FormMain_SizeChanged(object sender, EventArgs e)
{
GlobalSettings.appSettings.MainWindowsSize = this.Size;
}
}
Инфинити Масаракш
Инфинити Масаракш
1 176
Лучший ответ
Если при закрытии приложение действительно закрывается, то можно банально отловить WM_QUIT и сохранить (например, в реестре) текущие координаты.
При инициализации окна, считать координаты.

Для этого можно воспользоваться CancelEventHandler() , добавив свой обработчик на закрытие, либо вовсе, например, реализовать свой IMessageFilter.
Луки Мегурине
Луки Мегурине
17 415
создать два эвента на загрузку проги/формы и закрытие проги/формы
в проекте создать пару setting'ов (location, size)
загружать и сохранять аля Properties.Settings.Default.Location
вот тут думаю всё будет понятней http://www.sorrowman.org/c-sharp-programmer/save-user-settings.html
Можно хранить координаты в регистре.
Например так

public class FormLocation
{
public int x;
public int y;
}

public Point p = new Point();

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
FormLocation frmlocation = new FormLocation();

frmlocation.x = Convert.ToInt32(Location.X);
frmlocation.y = Convert.ToInt32(Location.Y);
//Открываем раздел RegApplication
RegistryKey regkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\RegApplication", true);
//Если раздел не обнаружен, создаем его
if (regkey == null)
{
RegistryKey newregkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft", true);
regkey = newregkey.CreateSubKey("RegApplication");
}
//Записываем значения x и y формы в ключи x и y
regkey.SetValue("x", frmlocation.x);
regkey.SetValue("y", frmlocation.y);
}

private void Form1_Load(object sender, EventArgs e)
{
FormLocation frmlocationSetup = new FormLocation();
//Открываем раздел реестра
RegistryKey regkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\RegApplication");
//Получаем значения ключей x и y
frmlocationSetup.x = Convert.ToInt32(regkey.GetValue("x"));
frmlocationSetup.y = Convert.ToInt32(regkey.GetValue("y"));
//Устанавливаем текущие значения x и y формы
p.X = frmlocationSetup.x;
p.Y = frmlocationSetup.y;

this.Location = new Point(p.X,p.Y);
}
Иван Данилов
Иван Данилов
1 198