Как Вы устанавливаете StartPosition формы Windows Forms с помощью кода?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

16
задан mattruma 18 March 2011 в 12:23
поделиться

6 ответов

, Если я делаю ShowDialog () и передавать родителя, он работает..., но я действительно не хочу показывать его Диалоговым окном.

, Который корректен, так как ShowDialog установил бы кадр. Родитель == nvShowDeals. Родитель
, Так как Вы используете.Show () тогда кадр. Родитель == пустой указатель таким образом 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);
}
11
ответ дан 30 November 2019 в 16:37
поделиться

Возможно, Вы не являетесь одними. Возможно, Вы весьма нормальны. Считайте этот (Microsoft Connect Customer Feedback):

свойство Windows Form StartPosition только работает на.ShowDialog метод а не на.Show метод

Клиент: "Windows Form StartPosition только работает на.ShowDialog метод а не на.Show метод.Примечание: Я также присоединил простой код и изображения результатов".

мс: "К сожалению, мы не будем в состоянии устранить эту конкретную проблему в будущем выпуске, поскольку фиксация здесь была бы повреждающимся изменением в поведении WinForms 1, 1.1 и 2"

18
ответ дан 30 November 2019 в 16:37
поделиться

Вы пытались установить свойство в вызывающем методе?

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);
}
1
ответ дан 30 November 2019 в 16:37
поделиться
public DealsForm()
{
    InitializeComponent();
    this.StartPosition = FormStartPosition.CenterParent;       
}

Попытка поместить его перед InitializeComponent (). Могло бы быть уже слишком поздно после InitializeComponent (форма уже могла бы быть запуском, и StatPosition установлен слишком поздно).

Обновление

я просто записал:

public Form1()
{
    InitializeComponent();
    this.StartPosition = FormStartPosition.CenterScreen;
}

И:

private void button1_Click(object sender, EventArgs e)
{
    Form1 f = new Form1();
    f.Show();
}

В (совершенно новом) проекте VS и когда я нажимаю в своем form2 кнопку, он открывает форму посреди экрана. Можно сделать то же с Родителем...

1
ответ дан 30 November 2019 в 16:37
поделиться

Я предложил бы проверить Ваш DealsForm. Designer.cs и удаление строки, которая устанавливает StartPosition там, затем делая его как Вы

, С другой стороны, возможно, попытка, устанавливающая его в событиях Load или Shown формы вместо этого.

0
ответ дан 30 November 2019 в 16:37
поделиться

Моя первая реакция: экспериментируйте немного с VS2008. Это должно быть на общем экране свойств.

, Если у Вас нет Visual Studio, тогда это становится немного более твердым.

А хороший сайт для проверки мог бы быть этим: csharp-online.net

Извините, что я не могу быть более услужлив

-3
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: