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 Error in check.length("fill") : 'gpar'成分'fill'的长度不能为零
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导