首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#将文本传回主窗体

C#将文本传回主窗体
EN

Stack Overflow用户
提问于 2018-01-14 16:14:43
回答 3查看 83关注 0票数 1

我正在尝试打开一个表单,获取用户输入,并将该输入传递回主表单以添加到列表中,但我无法理解这一点,如果我做错了什么,任何有用的建议将不胜感激!获取System.NullReferenceException时出错:‘未将对象引用设置为对象的实例。

代码语言:javascript
运行
复制
//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
    }
EN

Stack Overflow用户

发布于 2018-01-14 17:26:48

你的代码有一些暗示:

1- GetData不清楚应该做什么,在UserInputForm中获取控件的名称或txtName的文本,似乎您想将文本传递给Form1

2-如果第一个是真的,那么你不应该使你的代码变得复杂,只需执行以下操作:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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中单击一个按钮

代码语言:javascript
运行
复制
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);
    }
}
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48247763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档