【问题标题】:Coppying Listbox numbers to Array c#将列表框编号复制到数组 c#
【发布时间】:2017-08-16 23:40:50
【问题描述】:

我正在尝试将列表框中的项目复制到数组中。 但我在这里遗漏了一些东西。我收到错误方法名称预期。

我有三个错误:

错误 CS1955 不可调用的成员“ListBox.Items”不能像方法一样使用。

错误 CS0201 只有赋值、调用、递增、递减和新对象表达式可以作为语句使用

错误 CS0149 方法名称应为 WindowsFormsApp6

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

    }
    int i;
    private void Form1_Load(object sender, EventArgs e)
    {


        Random rand = new Random();
        for (i = 0; i <= 10; i++)
        {
            listBox1.Items.Add(rand.Next(0, 10));
        }


    }

    private void button1_Click(object sender, EventArgs e)
    {


    }

    private void label1_Click(object sender, EventArgs e)
    {


        for (i = 0; i <= listBox1.Items.Count - 1; i++)
        {
            string[] strArray = new string[11];

            strArray(i) == listBox1.Items(i);

            label1.Text = "Coppied items"; 


        }
    }
}

【问题讨论】:

  • 使用方括号[ ]而不是括号( )来引用数组的索引
  • 数组使用 [] 访问,而不是 ()。这不是 VB.Net
  • 您还应该在本地声明 i,在您的 for 条件中:for (int i = 0; ...
  • 您还应该在for 循环之外声明和实例化您的strArray。目前,您在每次迭代时将其设置为一个新数组
  • == 是一个比较,而不是一个赋值。 strArray[i] == listBox1.Items[i]; 不正确。

标签: c# winforms listbox


【解决方案1】:

在这一行:

strArray(i) == listBox1.Items(i);

有两个问题。

  1. 您使用 [] 访问数组,而不是括号。
  2. 您的意思是使用 = 运算符来分配值,而不是 ==。 '==' 用于检查条件。

结果:

strArray[i] = listBox1.Items[i];

【讨论】:

    【解决方案2】:

    代码有很多问题。您的问题的主要答案是您使用方括号而不是括号来引用数组项。

    但您也不需要在类级别声明i 变量。它应该在最低要求的范围内声明,即在for 循环中。

    您还应该在循环之外声明您的strArray,否则每次都会重新创建它。我不清楚您是否应该在方法或类级别声明它,因为您没有显示任何实际使用它的代码。

    此外,在向数组中添加项目时,您使用的是比较运算符 (==) 而不是赋值运算符 (=)。

    以下是解决这些问题的方法:

    public Form1()
    {
        InitializeComponent();
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
        Random rand = new Random();
    
        for (int i = 0; i <= 10; i++)
        {
            listBox1.Items.Add(rand.Next(0, 10));
        }
    }
    
    private void label1_Click(object sender, EventArgs e)
    {
        string[] strArray = new string[listBox1.Items.Count];
    
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            strArray[i] = listBox1.Items[i];
        }
    
        label1.Text = "Coppied items"; 
    }
    

    【讨论】:

      【解决方案3】:

      这就是我现在所拥有的。代码可以编译,但标签上没有显示消息。

       private void button1_Click(object sender, EventArgs e)
          {
              string[] strArray = new string[listBox1.Items.Count];
      
              for (int i = 0; i < listBox1.Items.Count; i++)
              {
                  strArray[i] = listBox1.Items[i].ToString();
              }
      
              label1.Text = "Coppied items";
      
          }
      

      【讨论】:

        【解决方案4】:

        您可以使用ListItemCollection.CopyTo 方法在没有循环的情况下执行此操作。

        private void label1_Click(object sender, EventArgs e)
        {
            string[] strArray = new string[listBox1.Items.Count];
            listBox1.Items.CopyTo(strArray, strArray.GetLowerBound(0));
            label1.Text = "Copied items";
        }
        

        【讨论】:

        • 看着你的回答我怀疑你的意思是标签1上没有显示消息。该声明没有太多可能出错的地方。代码正在运行,您正在查看一个名为 label1 的标签控件,对吗?
        猜你喜欢
        • 1970-01-01
        • 2018-01-27
        • 2021-12-27
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        相关资源
        最近更新 更多