我正在尝试打开一个表单,获取用户输入,并将该输入传递回主表单以添加到列表中,但我无法理解这一点,如果我做错了什么,任何有用的建议将不胜感激!获取System.NullReferenceException时出错:‘未将对象引用设置为对象的实例。
//Character Class
public class Character {
private string _Name;
public string Name {
get { return _Name; }
set { _Name = value; }
}
public override string ToString() {
return _Name;
}
}
//Main Form1
public List<Character> charList = new List<Character>();
public EventHandler CharAdded;
public void GetData(string name) {
Character c = new Character();
c.Name = name;
charList.Add(c);
}
private void btnCreateChar_Click(object sender, EventArgs e) {
UserInputForm uif = new UserInputForm();
//Subscribe to events
CharAdded += uif.btnAdd_Click;
//Call Event
if (CharAdded != null) {
CharAdded(this, new EventArgs());
}
//Show Form
uif.Show();
}
//UserInputForm
public void btnAdd_Click(object sender, EventArgs e) {
Form1 mainForm = sender as Form1;
mainForm.GetData(txtName.Text); //Error on line
}发布于 2018-01-14 17:26:48
你的代码有一些暗示:
1- GetData不清楚应该做什么,在UserInputForm中获取控件的名称或txtName的文本,似乎您想将文本传递给Form1
2-如果第一个是真的,那么你不应该使你的代码变得复杂,只需执行以下操作:
public partial class UserInputForm : Form
{
public new Form1 Parent { get; set; }//If you want to replace Parent prop use new keyword otherwise rename Parent prop
public UserInputForm(Form1 parent)
{
Parent = parent;
InitializeComponent();
}
public void btnAdd_Click(object sender, EventArgs e)
{
Parent.SetData(txtName.Text); //Error on line
}
}在Form1中
public partial class Form1 : Form
{
public List<Character> charList = new List<Character>();
public void SetData(string name)
{
Character c = new Character();
c.Name = name;
charList.Add(c);
}
private void button1_Click(object sender, EventArgs e)
{
UserInputForm uif = new UserInputForm(this);
uif.Show();
}
}4-但是如果你想将控件名称添加到charList中,然后让它们的值做一些类似的事情,那么在From中定义一个属性作为子级,如下所示:
Form1:
public partial class Form1 : Form
{
public List<Character> charList = new List<Character>();
public UserInputForm Child { get; set; }
public void SetData(string name)
{
Character c = new Character();
c.Name = name;
charList.Add(c);
}
public Form1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
UserInputForm uif = new UserInputForm(this);
uif.Show();
}
}和UserInputForm:
public partial class UserInputForm : Form
{
public new Form1 Parent { get; set; }//If you want to replace Parent prop use new keyword otherwise rename Parent prop
public UserInputForm(Form1 parent)
{
Parent = parent;
parent.Child = this;
InitializeComponent();
}
public void btnAdd_Click(object sender, EventArgs e)
{
Parent.SetData(txtName.Name); //Error on line
}
}5-如果您想要将控件的数据存储在charList中,还有一件事,假设在Form1中单击一个按钮
private void btnGetUserInputTextBoxData_Click(object sender, EventArgs e)
{
var controls = Child.Controls;
foreach (Character controlName in charList)
{
var ctr = (TextBox)controls.Find(controlName.Name, false).FirstOrDefault();
Console.WriteLine(ctr.Text);
}
}https://stackoverflow.com/questions/48247763
复制相似问题