【发布时间】:2015-05-07 21:11:04
【问题描述】:
我正在创建一个应用程序,如果您单击按钮,它将为每个选定的行删除特定字符。
例如:我在RichTextbox的每一行中都有“//”并将文本着色为红色,这就像Visual Studio中的注释和取消注释功能。
问题是如何删除每一行中的“//”并以其默认颜色返回颜色?
此代码用于添加“//”并将其着色为红色:
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (richTextBox1.Text.Length > 0 && richTextBox1.SelectionLength >= 0)
{
string[] lines = richTextBox1.Text.Split(new string[] { Environment.NewLine, "\n", "\r", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
Color normalColor = Color.Black, commentColor = Color.Red;
int selStart = richTextBox1.SelectionStart, selEnd = selStart + richTextBox1.SelectionLength,
startLine = -1, endLine = -1, lineSum = 0, k = 0;
for (k = 0; k < lines.Length; k++)
if (startLine == -1)
{
if ((lineSum += lines[k].Length + 1) > selStart)
{
startLine = k;
if (selEnd <= lineSum) endLine = k;
}
}
else if (endLine == -1)
{
if ((lineSum += lines[k].Length + 1) >= selEnd)
endLine = k;
}
else break;
for (int i = 0; i < lines.Length; i++)
lines[i] = (i >= startLine && i <= endLine ? "//" : "") + lines[i];
richTextBox1.Text = "";
richTextBox1.SelectionStart = 0;
for (int i = 0; i < lines.Length; i++)
{
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.SelectionColor = lines[i].TrimStart().StartsWith("//") ? commentColor : normalColor;
richTextBox1.SelectedText = lines[i] += (i == lines.Length - 1 ? "" : "\r\n");
}
int selectStarIndx = richTextBox1.GetFirstCharIndexFromLine(startLine), selectEndIndx = richTextBox1.GetFirstCharIndexFromLine(endLine + 1);
if (selectEndIndx == -1) selectEndIndx = richTextBox1.Text.Length;
richTextBox1.Select(selectStarIndx, selectEndIndx - selectStarIndx);
richTextBox1.Focus();
}
}
请帮助我如何使用新按钮取消注释行。
【问题讨论】:
-
使用方法并摆脱事件处理程序和主窗体中的大量代码。否则你以后不能在这个项目中重新引用任何东西
-
Stackoverflow 是一种学习很多东西的好方法。同时,如果你每件事都依赖它,那么你将永远是一个用户,而不是成为一名优秀的开发人员。为什么我的意思是,如果你得到一些要评论的东西,那么你应该尝试自己去获得未评论的东西。否则stackoverflow不是帮助,而是上瘾..
-
好的先生,我明白你在说什么.. 但感谢你回答我,即使我问得太多并且不是我自己学习的。再次感谢您,请与我交谈,因为明天我的论文有截止日期,我将在第二天为我的教授辩护代码
-
如果你好好研究过my post,你会发现它也包含了这个问题的答案..
标签: c# winforms richtextbox