Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
, Если я делаю 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);
}
Возможно, Вы не являетесь одними. Возможно, Вы весьма нормальны. Считайте этот (Microsoft Connect Customer Feedback):
свойство Windows Form StartPosition только работает на.ShowDialog метод а не на.Show метод
Клиент: "Windows Form StartPosition только работает на.ShowDialog метод а не на.Show метод.Примечание: Я также присоединил простой код и изображения результатов".
мс: "К сожалению, мы не будем в состоянии устранить эту конкретную проблему в будущем выпуске, поскольку фиксация здесь была бы повреждающимся изменением в поведении WinForms 1, 1.1 и 2"
Вы пытались установить свойство в вызывающем методе?
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);
}
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 кнопку, он открывает форму посреди экрана. Можно сделать то же с Родителем...
Я предложил бы проверить Ваш DealsForm. Designer.cs и удаление строки, которая устанавливает StartPosition там, затем делая его как Вы
, С другой стороны, возможно, попытка, устанавливающая его в событиях Load или Shown формы вместо этого.
Моя первая реакция: экспериментируйте немного с VS2008. Это должно быть на общем экране свойств.
, Если у Вас нет Visual Studio, тогда это становится немного более твердым.
А хороший сайт для проверки мог бы быть этим: csharp-online.net
Извините, что я не могу быть более услужлив