Hy,
我有以下构造函数:
public partial class SelectSize : Form
{
public SelectSize(String name)
{
this.Name = name;
InitializeComponent();
}
public String Name
{ get; set; }
我想让Name在以下方法中使用它:
p private void button1_Click(object sender, EventArgs e)
{
if (((int.Parse(noRows.Text) % 2) == 0) && (((int.Parse(noCols.Text) % 2) == 0)) && ((int.Parse(noRows.Text) ==
int.Parse(noCols.Text))) && ((int.Parse(noRows.Text) > 6) && ((int.Parse(noRows.Text) > 6))))
{
//String name = this.Name;
PlayMe f = new PlayMe(int.Parse(noCols.Text), int.Parse(noCols.Text), Name);
this.Hide();
f.ShowDialog();
this.Close();
但我得到Name的空引用。
我如何将一个变量转移到另一个方法?
诚恳,
答案 0 :(得分:0)
如果this.Name为null,则调用另一个构造函数,或者实际将null传递给构造函数。检查一下。
当然,它可能在此期间被覆盖。例如。从我们的角度来看。因为我们不知道你的所有代码,this.Name = null;可能在InstanciateComponent()
。
嗯,可能会发生这两个方法都没有在这个类的相同(相同)实例上执行。比较ojbjects'地址,如果他们真的是平等的。
顺便说一句,您应该致电this.Name
而不是this.name
而InstanciateComponent()
应该是instanciateComponent()
。
答案 1 :(得分:0)
除非您设置名称,否则名称将为null。你需要给出一个默认值来获得它。
答案 2 :(得分:0)
当然它将是空引用,因为你没有初始化它,你将如何设置名称的值?
答案 3 :(得分:0)
_button1_Click_? 我猜你与Form1.Name
发生冲突写作时
this.Name = "value";
您尝试更改Form1的名称
UPD:
试试这个:
namespace test
{
public partial class SelectSize : Form
{
public SelectSize(String name)
{
InitializeComponent();
this.Name = name;
}
public String Name
{ get; set; }
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(this.Name); // It must show a string from SelectSize's constructor
}
}
}
答案 4 :(得分:0)
我现在不知道上面的代码不起作用的原因。
谢谢大家的帮助,您的好建议让我改进了我的代码并找到了解决方案。
初始表格看起来如下:
private void nXNGameToolStripMenuItem_Click(object sender, EventArgs e)
{
SelectSize ss = new SelectSize(this);
ss.ShowDialog();
}
现在SelectSize表单和button_Click是:
public partial class SelectSize : Form
{
MainWin f1;
public SelectSize(MainWin f1)
{
this.f1 = f1;
InitializeComponent();
}
public String Name
{ get; set; }
private void button1_Click(object sender, EventArgs e)
{
if (((int.Parse(noRows.Text) % 2) == 0) && (((int.Parse(noCols.Text) % 2) == 0)) && ((int.Parse(noRows.Text) ==
int.Parse(noCols.Text))) && ((int.Parse(noRows.Text) > 6) && ((int.Parse(noRows.Text) > 6))))
{
//String name = this.Name;
PlayMe f = new PlayMe(int.Parse(noCols.Text), int.Parse(noCols.Text), f1.Name);
this.Hide();
f.ShowDialog();
this.Close();