指数超出范围。必须是非负数且小于集合的大小。 (参数'索引')'

Posted

技术标签:

【中文标题】指数超出范围。必须是非负数且小于集合的大小。 (参数\'索引\')\'【英文标题】:Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')'指数超出范围。必须是非负数且小于集合的大小。 (参数'索引')' 【发布时间】:2022-01-03 20:40:47 【问题描述】:

我的 WPF APP 有问题。

当我按下向上按钮 (nach oben) 或向下按钮 (nach unten) 并且列表中没有插入任何项目时,它不应该给我错误:System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')'

当我已经插入一些项目时,向上和向下按钮按预期工作。

private void Verschieben -> listBox.Items.Insert(index,item);上显示错误

namespace Lektion1Neu

    public partial class MainWindow : Window
    
        public MainWindow()
        
            InitializeComponent();
        

        private void Verschieben(int index)
        
            Object item = listBox.SelectedItem;
            listBox.Items.Remove(item);
            listBox.Items.Insert(index,item);
            listBox.SelectedIndex = index;
        

        private void beenden_Click(object sender,RoutedEventArgs e)
        
            Application.Current.Shutdown();
        

        private void uebernehmen_Click(object sender, RoutedEventArgs e)
        
            listBox.Items.Add(textBox.Text);
            statusLabel.Content = "Eintrag übernommen";
        

        private void btnNachOben_Click(object sender, RoutedEventArgs e)
        
            int index = listBox.SelectedIndex;
            if (index == 0)
                index = listBox.Items.Count -1;
            else
                index--;
            Verschieben(index);
            statusLabel.Content = "Eintrag nach oben verschoben";
                
        
        private void btnNachUnten_Click(object sender, RoutedEventArgs e)
        
            int index = listBox.SelectedIndex;
            if (index == listBox.Items.Count -1)
                index = 0;
            else
                index++;
            Verschieben(index);
            statusLabel.Content = "Eintrag nach unten verschoben";
        


        private void btnLöschen_Click(object sender, RoutedEventArgs e)
        
            /*int index = listBox.SelectedIndex;
            listBox.Items.RemoveAt(index);
            */
            while(listBox.SelectedItems.Count >0)
                listBox.Items.Remove(listBox.SelectedItems[0]);

        

【问题讨论】:

【参考方案1】:

如果按下按钮并且没有任何项目,您可能只想什么都不做。

类似:

private void btnNachUnten_Click(object sender, RoutedEventArgs e)

    if (listBox.Items.Count == 0)
    
       return;
    

但通常的 wpf 方式是 ICommand,您可以使用 canexecute 来禁用按钮。这也会使它们变灰。

【讨论】:

但是当项目在列表中时它也不会像这样工作...... 那么还有另一个问题以及您描述的问题和您的陈述“当我已经插入了一些项目时,向上和向下按钮按预期工作。”不是真的。

以上是关于指数超出范围。必须是非负数且小于集合的大小。 (参数'索引')'的主要内容,如果未能解决你的问题,请参考以下文章

指数超出范围。必须是非负数且小于集合的大小

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

错误索引超出范围。必须是非负数且小于集合的大小

指数超出范围。必须为非负数且小于集合参数 name:index 的大小

错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:索引