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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как задать координаты новой формы при открытии? 
V
    Опции темы
graham
Дата 31.8.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть Form1 - основная и Form2, которую вызываю из Form1 через ShowModal();
При каждом новом вызове Form2 она появляется в новом месте. Хочу сделать чтобы положение Form2 зависело от Form1. 

Пробовал передать Form1->Location.X и Y и установить в конструкторе Form2 так же в X и Y.
Пробовал через Point. Но всеравно не работает. 
Пробовал координаты устанавливать в событии OnShow, тоже н помогло. 
Срабатывает только в событии OnLoad, но не знаю как туда передать нужные координаты.
PM MAIL   Вверх
diadiavova
Дата 31.8.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



В форме 2  создай свойство типа Point. Перед вызовом формы передай этому свойству координаты, а в обработчике лоуда используй их.
Код

public class Form2:Form
{
    public Point ShowLocation{get;set;}
    public Form2()
    {
        this.Load += Form2_Load;
    }
    void Form2_Load(object sender, EventArgs e)
    {
        this.SetDesktopLocation(ShowLocation.X, ShowLocation.Y);
    }
}


Примерно так


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Lunatic2009
Дата 31.8.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



form2.StartPosition = FormStartPosition.CenterParent;

или в дизайнере: StartPosition = CenterParent

если нужно в коде, можно сделать что-то на подобии такого:

Код

//Form1
private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2(RectangleToScreen(DisplayRectangle));
    form2.ShowDialog();
}

//Form2
private Rectangle _rect;

public Form2(Rectangle rect)
{
    InitializeComponent();
    _rect = rect;
}

private void Form2_Load(object sender, EventArgs e)
{
    int x = _rect.X + (_rect.Width/2 - DisplayRectangle.Width/2);
    int y = _rect.Y + (_rect.Height/2 - DisplayRectangle.Height/2);

    SetBounds(x, y, DisplayRectangle.Width, DisplayRectangle.Height);
}

PM   Вверх
graham
Дата 1.9.2009, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, сделал дополнительное свойство, в которое передаю из конструктора. А уже его использую в OnLoad. Вот только так и не понял, почему нельзя сразу в конструкторе установить Location  и не париться с дополнительными свойствами. Сразу так и не стал делать, думал что-то недопонимаю.
PM MAIL   Вверх
diadiavova
Дата 1.9.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



graham, на счёт StartPosition Lunatic2009 прав. Задай ему значение Manual и устанавливай Location.
Код

            using (var f = new Form())
            {
                f.StartPosition= FormStartPosition.Manual;
                f.Location = new Point(this.Left + 20, this.Top + 20);
                f.ShowDialog();
             }
 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
graham
Дата 1.9.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



После установки StartPosition = Manual поучилось сделать так:

Код

Form2 ^f = gcnew Form2();
f->DesktopLocation = this->Location;
f->ShowDialog();


теперь не надо никуда передавать координаты, все дело в StartPosition = Manual. Самое простое всегда навиду smile

Это сообщение отредактировал(а) graham - 1.9.2009, 12:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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