【问题标题】:C# - Replace part of string from ListBox with RichTextbox DataC# - 用 RichTextbox 数据替换 ListBox 中的部分字符串
【发布时间】:2011-10-14 13:59:09
【问题描述】:

我有一个标有placementTwoListBox 的列表框,我在其中加载了数据。 PlacementTwoListBox 如下所示:

placementTwoListBox:

U3      IC-00276G   236.135  198.644  90   
U12     IC-00270G   250.610  201.594  0    
J1      INT-00112G  269.665  179.894  180  
J2      INT-00112G  269.665  198.144  180  
J6      INT-00113G  227.905  174.994  180  
J3      INT-00113G  227.905  203.244  180  
U13     EXCLUDES    242.210  181.294  180  

我还有 两个 RichTextBox 标记为calculatedXRichTextBoxcalculatedYRichTextBox。它们看起来像这样:

calculatedXRichTextBox:

246.135
260.610
279.665
279.665
237.905
237.905
252.210

calculatedYRichTextBox:

298.644
301.594
279.894
298.144
274.994
303.244
281.294

我正在尝试用 calculatedXRichTextBox 中的值替换 placementTwoListBox第 3 列 中的值并替换这些值在 placementTwoListBox第 4 列 中使用 calculatedYRichTextBox 中的值来获得最终结果(并将其放回原ListBox)的:

placementTwoListBox (更新)

U3      IC-00276G   246.135  298.644  90   
U12     IC-00270G   260.610  301.594  0    
J1      INT-00112G  279.665  279.894  180  
J2      INT-00112G  279.665  298.144  180  
J6      INT-00113G  237.905  274.994  180  
J3      INT-00113G  237.905  303.244  180  
U13     EXCLUDES    252.210  281.294  180  

  • 有人知道如何实现吗?

编辑:

使用这两个时: @CrazyDart

calculatedXRichTextBox:

758.135
772.61
791.665
791.665
749.905
749.905
764.21

calculatedYRichTextBox:

-301.356
-298.406
-320.106
-301.856
-325.006
-296.756
-318.706

placementTwoListBox 看起来像这样:

U3      IC-00276G   758.135  -301.356666666  90   
U12     IC-00270G    772.61  -298.40666666  0    
J1      INT-00112G  791.665  -320.1066666  180  
J2      INT-00112G  791.665  -301.856666  180  
J6      INT-00113G  749.905  -325.00666  180  
J3      INT-00113G  749.905  -296.7566  180  
U13     EXCLUDES     764.21  -318.706  180  

【问题讨论】:

  • Colton,您的教授知道 StackOverflow 会为您完成所有作业吗?
  • @AresAvatar:我不在学校。我正在努力学习一些小东西,但我没有书。不过还是谢谢..
  • @AresAvatar:对不起。我只是对人们假设我在学校或为类似的事情做这件事感到有点沮丧。我真的只是想从头开始学习和构建一些东西。
  • 科尔顿,别担心。我只是给你一个轻推的眨眼眨眼,我对你的回答一点也不生气。我希望你也没有被冒犯。顺便说一句,对您的问题 +1。
  • @AresAvatar:哈哈。不,我很好..通过计算机来表达讽刺有点困难.. :)。感谢您的 +1

标签: c# string listbox replace richtextbox


【解决方案1】:

这段代码是从placementTwoListBox中填充calculatedXRichTextBoxcalculatedYRichTextBox

string[] lines = new string[placementTwoListBox.Items.Count];

for (int itemIndex = 0; itemIndex < lines.Length; itemIndex++)
{ 
    lines[itemIndex] = placementTwoListBox.Items[itemIndex].ToString();
}

List<string> calculatedXLines = new List<string>();//to fill calculatedXRichTextBox
List<string> calculatedYLines = new List<string>();//to fill calculatedYRichTextBox

foreach (string line in lines)
{
    string[] items = line.Split(new string[] { "\t", " " }, 
        StringSplitOptions.RemoveEmptyEntires);

    if (items.Length > 2)
    {
        calculatedXLines.Add(items[2]);
        calculatedYLines.Add(items[3]);
    }
}

//add them to the calculatedYRichTextBox and the placementTwoListBox
calculatedXRichTextBox.Text = string.Join("\n", calculatedXLines); 
calculatedYRichTextBox.Text = string.Join("\n", calculatedYLines); 

编辑:回答问题:

string[] calculatedXLines = calculatedXRichTextBox.Text.Split(new string[] { "\n", "\r" },

StringSplitOptions.RemoveEmptyEntries);

string[] calculatedYLines = calculatedYRichTextBox.Text.Split(new string[] { "\n", "\r" },
    StringSplitOptions.RemoveEmptyEntries);

string[] lines = new string[placementTwoListBox.Items.Count];

for (int itemIndex = 0; itemIndex < lines.Length; itemIndex++)
{ 
    lines[itemIndex] = placementTwoListBox.Items[itemIndex].ToString();
}

List<string[]> newLines = new List<string[]>();

for (int lineIndex = 0; lineIndex < lines.Length; lineIndex++)
{
    string[] items = lines[lineIndex].Split(new string[] { " ", "\t" },
        StringSplitOptions.RemoveEmptyEntries);

    items[2] = calculatedXLines[lineIndex];
    items[3] = calculatedYLines[lineIndex];

    newLines.Add(items);
}

//represents your data on the `placementTwoListBox`:
placementTwoListBox.Items.Clear();
foreach (string[] lineItems in newLines)
{
    placementTwoListBox.Items.Add(string.Join("\t", lineItems));
}

【讨论】:

  • 我们不知道那些是制表符...它们很可能是空格。
  • @Jalal:我有点迷失在你的代码中。我不明白你怎么能接受placementTwoListBox.Text。我想我需要抓住列表中的每个 .Item 吗?另外,这仅适用于calculatedYRichTextBox.. 我会为calculatedXRichTextBox 更改什么? -- 我正在尝试同时使用 RichTextBox 并在 ListBox 中添加/替换它们
  • @Colton:我想念你的问题。此处的代码只是填写calculatedXRichTextBoxcalculatedYRichTextBox。我现在再次阅读您的问题。我会更新答案。
  • @Jalal:这似乎没有任何作用。我正在使用它,我会看看我是否能让它正常工作
  • @Jalal:我已将 ListBox 提取到一个新的 RichTextBox 中。因此,如果它可以更轻松地Text.Split 文本框向上并将RichTextBox 中的第3 和第4 列 替换为其他两个RichTextBoxes 中每个换行符上的值..?跨度>
【解决方案2】:

这应该让你开始:

        string[] lines = placementTwoListBox.Lines;
        for (int line = 0; line < lines.Length; line++)
        {
            string replacement1 = calculatedXRichTextBox.Lines[line];
            while (replacement1.Length < 7)
            {
                replacement1 = " " + replacement1;
            }
            lines[line] = lines[line].Remove(20, 7).Insert(20, replacement1);

            string replacement2 = calculatedYRichTextBox.Lines[line];
            while (replacement2.Length < 7)
            {
                replacement2 = " " + replacement2;
            }
            lines[line] = lines[line].Remove(29, 7).Insert(29, replacement1);
        }
        placementTwoListBox.Lines = lines;

更新:我完全错过了一些列表,而不是所有 RichTextBoxes...查看更新的代码:

    for (int line = 0; line < placementTwoListBox.Items.Count; line++)
    {
        string replacement1 = calculatedXRichTextBox.Lines[line];
        while (replacement1.Length < 7)
        {
            replacement1 = " " + replacement1;
        }
        placementTwoListBox.Items[line] = ((string)placementTwoListBox.Items[line]).Remove(20, 7).Insert(20, replacement1);

        string replacement2 = calculatedYRichTextBox.Lines[line];
        while (replacement2.Length < 7)
        {
            replacement2 = " " + replacement2;
        }
        placementTwoListBox.Items[line] = ((string)placementTwoListBox.Items[line]).Remove(29, 7).Insert(29, replacement1);
    }

【讨论】:

  • hmmm,您可能还想在 while 循环之前修剪替换字符串... string replacement1 = computedXRichTextBox.Lines[line].Trim();
  • placementTwoListBox.Lines 不起作用。 PlacementTwoListBox 没有.Lines。所以第一行和最后一行都不能正常工作
  • 我应该使用.Text.Split而不是.Lines吗?
  • 抱歉,我错过了其中一些不是所有 RichTextBox 的列表...我更新了代码。
  • 测试过了。它在大多数情况下都有效,除了在你的最后一行它应该是replacement2 而不是replacement1。但是,我对您的代码有疑问。当我测试它时,它大部分输出正确的值。小数位似乎多了一个数字。当 4 不应该存在时,我得到的一些结果看起来像这样 -51.3564..
猜你喜欢
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
相关资源
最近更新 更多