代码之家  ›  专栏  ›  技术社区  ›  dexter

均匀调整列的字符串填充

  •  0
  • dexter  · 技术社区  · 15 年前

    好吧,我很惭愧我发帖寻求帮助,但给你。我只需要在dropdownlist的3个均匀调整的列中显示一些数据。

    下面是根据最大长度字符串调整每个字符串的填充的代码。 第二列看起来不错,但最后一列被max length-string length之差的偏移量关闭。我不明白为什么。。。

     List<Data> list = new List<Data>();
    
                Data d = new Data() { Data1 = "328989892787", Data2 = "MNJK", Data3="23" };
                Data b = new Data() { Data1 = "343567", Data2= "HJKLLL", Data3="2345" };
                Data g = new Data() { Data1 = "64737", Data2="UI", Data3="234" };
                Data f = new Data() { Data1 = "878437878223245", Data2="", Data3="45653" };
                Data a = new Data() { Data1 = "234", Data2 = "DataMe", Data3="1"};
    
                list.Add(d);
                list.Add(b);
                list.Add(g);
                list.Add(f);
                list.Add(a);
    
                var sorted1 = list.OrderByDescending(q => q.Data1.Length).ToList();
                var sorted2 = list.OrderByDescending(s => s.Data2.Length).ToList();
                var sorted3 = list.OrderByDescending(r => r.Data3.Length).ToList();
    
                int maxd1 = sorted1[0].Data1.Length;
                int maxd2 = sorted2[0].Data2.Length;
                int maxd3 = sorted3[0].Data3.Length;
    
                ListItem item = null;
                foreach (var dd in list) 
                {
    
                    string result = string.Format("{0}{1}{2}",
                        dd.Data1.PadRight(40 + (maxd1 - dd.Data1.Length), '\u00A0'),
                        dd.Data2.PadRight(50 +(maxd2 - dd.Data2.Length), '\u00A0'),
                        dd.Data3);
    
                    this.DropDownList1.Items.Add(new ListItem(result, dd.Data1));
    
                }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    您用于下拉列表的字体是这里的问题。代码假定字符串中的每个字符都具有相同的宽度。这只适用于固定音调的字体,如Courier New或控制台。第二列仍然有效,因为第一列只包含带数字的字符串。许多字体,但不是所有的字体,都给出了与空格相同的宽度。第三列出错,因为第二列包含字母。M比I需要更多的空间。

    更改字体。有些控件支持使用制表符对齐文本,我无法从您的标记中判断是否适用。

        2
  •  0
  •   Randy    15 年前
    60 +(maxd3 - dd.Data3.Length), 
    

    ???