weixin_44151228 2022-02-13 16:46 采纳率: 58.3%
浏览 23
已结题

c#想在toolstrip中插入datetimepicker控件,但是试了下面的方法不行,不知道什么原因

    private void AddDTPtoToolstrip(int n)
    {
        DateTimePicker dtp = new DateTimePicker();
        dtp.Width = 110;
        dtp.Format = DateTimePickerFormat.Custom;
        ToolStripControlHost host1 = new ToolStripControlHost(dtp);
        toolStrip1.Items.Insert(n, host1);//提示这句话索引已超出范围
    }

在Load事件中调用上面的代码,提示 :其他信息: 插入索引已超出范围。必须为非负值,并且必须小于或等于大小。

  • 写回答

1条回答 默认 最新

  • 码老头 2022-02-14 09:34
    关注

    应该是你传入的参数n的值超过了toolStrip1.Items这个集合的长度,比如下面示例:

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp2
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                var list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为0的位置插入数字6
                list.Insert(0, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为3的位置插入数字6
                list.Insert(3, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为5的位置插入数字6
                list.Insert(5, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                //list = new List<int> { 1, 2, 3, 4, 5 };
                //// 在索引为3的位置插入数字6
                //list.Insert(6, 6);
                //// 输出插入后的结果
                //Console.WriteLine(string.Join(",", list));
    
                Console.ReadKey();
            }
        }
    }
    

    输出结果:

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp2
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                var list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为0的位置插入数字6
                list.Insert(0, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为3的位置插入数字6
                list.Insert(3, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                list = new List<int> { 1, 2, 3, 4, 5 };
                // 在索引为5的位置插入数字6
                list.Insert(5, 6);
                // 输出插入后的结果
                Console.WriteLine(string.Join(",", list));
    
                Console.ReadKey();
            }
        }
    }
    

    如果使用如下示例的Insert(索引超过了数组索引长度),则会抛出异常:

    var list = new List<int> { 1, 2, 3, 4, 5 };
    
    // 在索引为6的位置插入数字6
    list.Insert(6, 6);
    // 输出插入后的结果
    Console.WriteLine(string.Join(",", list));
    

    异常如下图:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月22日
  • 已采纳回答 2月14日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线