【问题标题】:Unable to pass a text to another forms listbox无法将文本传递到另一个表单列表框
【发布时间】:2017-03-20 15:05:04
【问题描述】:

我正在尝试将一个值从我的 form3 的 textbox1 传递给我的 form1ListBox

这是form3 的代码:

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

这就是form1中写的内容:

public partial class Form1 : Form
{
    public Form1(string something)
    {
        InitializeComponent();
        listBox1.Items.Add(something);       

    }

错误是:

Form1' 不包含采用 0 个参数的构造函数。

提前感谢您的帮助!

【问题讨论】:

  • 您最好将代码和错误添加为文本 - 这样在显示问题时无法将其放入搜索和/或正确读取。您是否尝试添加一个无参数构造函数?
  • 它开始工作,但我收到另一条错误消息。我想用另一个表单中的项目填充表单上的列表框。请帮忙。
  • 欢迎来到 StackOverflow。您可以使用帖子下方的edit 按钮向其添加信息。
  • 现在到底是什么问题?如果您需要帮助,您需要发布更多代码。请不要发布代码截图。
  • 我会试试这个。我是新来的,如何在此评论框中添加代码行?谢谢你的快速帮助

标签: c# winforms listbox


【解决方案1】:

你应该看一下这个错误的来源()。我会疯狂地猜测您的代码中有一行使用无参数构造函数,例如:

Form1 foo = new Form1();

或者即使是起始形式:

Application.Run(new Form1());

你应该重载构造函数而不是简单地改变它,因为它是自动生成的,它很可能已经在某个地方以这种形式使用过。只需添加第二个构造函数:

public partial class Form1 : Form
{
    public Form()
    {
        InitializeComponent();
    }

    public Form(string something)
    {
        InitializeComponent();
        listBox.Items.Add(something);
    }
}

编辑:

试图将一个值从我的 form3 的 textbox1 传递到我的 form1 的列表框

这是一个与您最初建议的错误略有不同的问题。建议采用不同的方法。构造函数是无用的,因为它将创建一个不同的实例/对象,这与您在屏幕上看到的不同!换句话说,所有元素都会失去它们的值!

许多解决方案之一可以是创建一个方法,将项目添加到类Form1 中的ListBox

public void AddItemToListBox(string s)
{
    listBox.Items.Add(something);
}

并通过Form2 将当前窗口Form1 的实例传递给Form3
在每个类(Form2Form3)中都有一个 Form1 类型的变量

public Form1 temp_form1;

Form1类中调用Form2时,将起始窗口Form1的实例传递给变量temp_form1

Form2 form2 = new Form2();
form2.temp_form1 = this; // "this" stands for the instance of the current object

当您在 Form2 类中调用 Form3 时,它同样适用:

Form3 form3 = new Form3();
form3.temp_form1 = this.temp_form1;

最后只需调用Form3类中的方法更新列表框:

temp_form1.AddItemToListBox("yourstring");

【讨论】:

  • 正是我有这一行:Form1 foo = new Form1();但是没有这个如何在另一个表单中调用表单呢?
  • @RobertRimai 我试图让我的帖子更清晰一些。最近好吗?设法让您的数据进入启动窗口?
  • 提前谢谢你,我会尽快检查,但现在我很累。
  • 我不得不放弃多表单功能。我会扩大我的知识,并很快回来。让我很高兴的是,你们特别是孟竹,在一秒钟之内帮我解决了我的问题。非常感谢。
【解决方案2】:

不要删除表单的默认构造函数,将其保留在那里,然后在其下添加另一个带有自定义参数的构造函数。

public Form1()
{
    //Default constructor
    InitializeComponent();     
}

public Form1(string something)
{
    //Your custom constructor
    InitializeComponent();
    listBox1.Items.Add(something);       
}

【讨论】:

  • 但是我又遇到了问题。开始新游戏时,它会覆盖列表框的内容,而不是添加另一个名称。我想包含排序的高分列表框。提前谢谢!
  • 对不起,我也要谢谢你。我真的很累,而且时间紧迫。我很高兴地球上有像你这样的人。但是为什么它不将项目添加到列表框中,它总是覆盖第一行。我需要列表框来显示高分和名称并进行排序。请帮忙。
  • @RobertRimai 当你开始一个新游戏时,你是怎么做的呢?
  • 在form3中输入播放器名称后,将名称传递给form1列表框。隐藏 form3,再次显示 form1。我从form1开始了一个新游戏,由form2显示。泰。
  • 您确定不是每次都创建一个新的Form1 吗?你读过我回答的第二部分吗?
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多