如果listBox中的一个项目超出了右侧的界限,那么它将向下移动一行,我该怎么做呢

本文关键字:移动 我该怎么做 一行 一个 listBox 项目 如果 界限 | 更新日期: 2023-09-27 18:00:07

我在一个新表单中有这段代码,我将文本添加到textBox中,然后将其作为项添加到listBox中:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace GatherLinks
{
    public partial class ChangeLink : Form
    {

        public ChangeLink()
        {
            InitializeComponent();
        }
        public string getText()
        {
            return textBox1.Text;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {
            }
        }
        private void ChangeLink_Load(object sender, EventArgs e)
        {
            this.AcceptButton = button1;
        } 
    }
}

这就是我将文本添加到列表框的方式:

private void button2_Click(object sender, EventArgs e)
        {
            cl = new ChangeLink();
            cl.StartPosition = FormStartPosition.CenterParent;
            DialogResult dr = cl.ShowDialog(this);
            if (dr == DialogResult.Cancel)
            {
                cl.Close();
            }
            else if (dr == DialogResult.OK)
            {
                label4.Text = cl.getText();
                mainUrl = cl.getText();
                if (!LocalyKeyWords.ContainsKey(mainUrl))
                {
                    newUrl = true;
                    KeysValuesUpdate();
                }
                else
                {
                    newUrl = false;
                    KeysValuesUpdate();
                }
                OptionsDB.set_changeWebSite(cl.getText());
                cl.Close();
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
            }
        }

问题是,如果文本很长,那么在listBox的右边界/边框中,项目的文本将被剪切。所以为了看到它,我想以某种方式将它向下移动一行,或者需要多少行来显示项目的其余文本/名称

因此,它将被视为一个项目,但如果需要的话,在某些行。

更新:

这是我在运行应用程序时将项目加载到listBox的部分:

private void ListBoxLoadKeys(Dictionary<string, List<string>> dictionary, string FileName)
        {
            int t = listBox1.Width;
            using (StreamReader sr = new StreamReader(FileName))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    int i = line.Count();
                    tokens = line.Split(',');
                    dictionary.Add(tokens[0], tokens.Skip(1).ToList());
                    string tt = tokens[1].Substring(t - tokens[1].Length);
                    data.Add("Url: " + tokens[0] + " --- " + "Localy KeyWord: " + tokens[1]);
                }
            }
            listBox1.DataSource = data;
        }

因此变量t是listBox长度(宽度)在这一行中,我试图计算并获得令牌的文本[1]"

string tt = tokens[1].Substring(t - tokens[1].Length);

但我收到一个错误startIndex不能大于字符串的长度

现在我知道了listBox Length(Width),但我不想只在文本标记[1]超出listBox Width(Length)的范围时才将其放在新行中

我该如何修复和执行此操作?

再次更新:

现在再次更改代码,我首先尝试检查变量数据长度中的每一行是否大于变量t:

private void ListBoxLoadKeys(Dictionary<string, List<string>> dictionary, string FileName)
        {
            int t = listBox1.Width;
            using (StreamReader sr = new StreamReader(FileName))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    int i = line.Count();
                    tokens = line.Split(',');
                    dictionary.Add(tokens[0], tokens.Skip(1).ToList());
                    //string tt = tokens[1].Substring(t - tokens[1].Length);
                    data.Add("Url: " + tokens[0] + " --- " + "Localy KeyWord: " + tokens[1]);
                    if (data[i].Length > t)
                    {
                        MessageBox.Show("big");
                    }
                }
            }
            listBox1.DataSource = data;
        }
if (data[i].Length > t)
                        {
                            MessageBox.Show("big");
                        }

但我得到了一个错误:指数超出了范围。必须是非负的并且小于集合的大小

如果listBox中的一个项目超出了右侧的界限,那么它将向下移动一行,我该怎么做呢

使用标准列表框是无法做到这一点的。您需要创建自己的多行列表框。请参阅此链接以获取一些指导。http://www.codeproject.com/Articles/2695/An-editable-multi-line-listbox-for-NET

我已经在工作中实现了这一点(忽略了作者对配色方案的糟糕选择),而且效果很好。

相关文章: