【问题标题】:c# using dynamic toolsc# 使用动态工具
【发布时间】:2020-03-18 21:42:00
【问题描述】:

在 c# 表单应用程序中,当我单击按钮时,我会创建一个列表框。 我将 Item 从 TextBox 添加到 ListBox

当我单击按钮时,如果列表框不存在,我希望创建它。

因此,将 ListBox 创建代码分配给 if 块时,将 textBox 中的数据分配给 listBox 的代码失败。 我该如何解决这个问题?

if (araclar_eklendi == false)
{
ListBox listB_X = new ListBox();
listB_X.******** = new Point(380, 45);
this.Controls.Add(listB_X);

araclar_eklendi=true;
}

listB_X.Items.Add(txtBox_X.text);

【问题讨论】:

  • 此代码在 Button.Click 事件中运行,因此 ListBox listB_X 是一个本地对象:稍后您将无法使用此引用(如在 listB_X.Items.Add(txtBox_X.text); 中)。将 ListBox 声明为实例字段并检查它是否为 null 以决定是创建新的还是仅访问它。但是您可以简单地创建它,然后在第一次请求它的存在时显示它。
  • 如果列表框的位置和大小等是固定的,为什么不像往常一样将它添加到表单中(使用设计器)并使其隐藏(可见:假)首先?然后,您可以在此事件处理程序中使其在需要显示时可见,如果它已经不可见。

标签: c# visual-studio winforms dynamicobject


【解决方案1】:

您可以使用foreach 语句遍历表单的Controls 来检查ListBox 是否存在。并定义一个布尔值来存储结果。

这是一个你可以参考的演示。

// bool to check if a listbox exists
bool flag = false;

private void button1_Click(object sender, EventArgs e)
{
    Control control = new Control();
    // traverse the form
    foreach (Control c in this.Controls)
    {
        if (c is ListBox)
        {
            control = c;
            flag = true;
            break;
        }
    }
    if (flag) // if true, access the listbox and add new item from tb
    {
        ((ListBox)control).Items.Add(textBox1.Text);
    }
    else // if false, create a new listbox
    {
        ListBox listBox = new ListBox();
        listBox.Location = new Point(380, 45);
        this.Controls.Add(listBox);
        listBox.Items.Add(textBox1.Text);
    }
}

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多