Как установить форму StartPosition формы Windows Forms с помощью кода?
Есть ли способ установить форму StartPosition формы Windows Forms с помощью кода? Кажется, все, что я пытаюсь получить в StartPostion по умолчанию.
Вот что я делаю в форме для отображения:
public DealsForm()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
}
Вот что я делаю, чтобы отобразить форму:
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
frm.Show(this);
}
Я попытался поместить следующее в каждый из вышеперечисленных методов, безрезультатно:
this.StartPosition = FormStartPosition.CenterParent;
Если я установил его через Редактор свойств... он отлично работает, но я бы действительно хотел сделать это с помощью кода.
Должно быть без проблем... но для жизни меня я не могу понять это... может быть, мне нужно больше кофеина.
Обновление:
Если я делаю ShowDialog()
и передаю родительский объект, он работает... но я действительно не хочу показывать его как диалог.
Ответы
Ответ 1
Если я делаю ShowDialog() и передаю родитель, это работает... но я действительно не хотите показать это как диалог.
Это правильно, так как ShowDialog установил frm.Parent == nvShowDeals.Parent
Поскольку вы используете .Show(), то frm.Parent == null, поэтому FormStartPosition.CenterParent игнорируется.
Итак, чтобы выполнить эту функцию, я внес бы следующие изменения:
public DealsForm()
{
InitializeComponent();
//this.StartPosition = FormStartPosition.CenterParent;
}
//DealsForm_Load Event
private void DealsForm_Load(object sender, EventArgs e)
{
this.Location = this.Owner.Location; //NEW CODE
}
И здесь я бы сделал следующие изменения:
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
frm.StartPosition = FormStartPosition.Manual; //NEW CODE
frm.Show(this);
}
Ответ 2
Возможно, вы не одиноки. Может быть, ты не сумасшедший. Прочтите это (обратная связь с клиентами Microsoft Connect):
Свойство Windows Form StartPosition работает только для метода .ShowDialog, а не для .Show-метода
Клиент: "Windows Form StartPosition работает только для метода .ShowDialog, а не для .Show-метода. Примечание: я также добавил простой код и изображения результатов".
MS: "К сожалению, мы не сможем исправить эту конкретную проблему в будущей версии, так как исправление здесь было бы нарушением изменения поведения WinForms 1, 1.1 и 2"
Ответ 3
Вы можете сделать это, вызвав this.CenterToParent() в событии Form_Load (когда родитель фактически известен). Не вызывайте это в конструкторе, потому что вызывается родитель, который он задает, когда вызывается Show (form).
private void myForm_Load(object sender, EventArgs e)
{
CenterToParent();
}
Я знаю, что эта ветка старая, но на нее можно ответить довольно легко, поэтому, надеюсь, помочь другим, кто сталкивается с ней, найти легкое решение.
Ответ 4
Чтобы сосредоточиться на родительском для вызова .Show, это то, что я должен был сделать:
childForm.Location = new Point(
(parentForm.Location.X + parentForm.Width / 2) - (childForm.Width / 2),
(parentForm.Location.Y + parentForm.Height / 2) - (childForm.Height / 2));
childForm.StartPosition = FormStartPosition.Manual;
Ответ 5
Вы пытались установить свойство в вызывающем методе?
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
DealsForm frm = new DealsForm();
frm.DataSource = this.Deals;
// Insert this
frm.StartPosition = FormStartPosition.CenterParent;
frm.Show(this);
}
Ответ 6
public DealsForm()
{
this.StartPosition = FormStartPosition.CenterParent;
InitializeComponent();
}
Попробуйте установить его перед InitializeComponent(). Возможно, уже слишком поздно после InitializeComponent (форма может быть уже запущена, а StatPosition установлен слишком поздно).
Update
Я только что написал:
public Form1()
{
this.StartPosition = FormStartPosition.CenterScreen;
InitializeComponent();
}
и
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Show();
}
В проекте VS (совершенно новый), и когда я нажимаю в своей форме2 на кнопку, он открывает форму в середине экрана. Вы можете сделать то же самое с родителем...
Ответ 7
Я бы предложил проверить ваши DealsForm.Designer.cs и удалить строку, которая устанавливает StartPosition там, а затем делать это как есть.
В качестве альтернативы, возможно, попробуйте установить его в случаях загрузки или отображения формы.
Ответ 8
Моя первая реакция: немного экспериментировать с VS2008. Он должен находиться на экране общих свойств.
Если у вас нет Visual Studio, это становится немного сложнее.
Хорошим сайтом для проверки может быть этот: csharp-online.net
Извините, что я не могу быть более полезным