C# WinForm 控件光标
1 private void MoveCmdToLast(TextBox txtCmdInput, String selCmd)//把所选中的命令移动到最下一行然后显示在文本框中
2 {
3 String txtStr = txtCmdInput.Text;
4 int start = txtStr.IndexOf(selCmd);
5
6 //把选中行或光标所在行的命令送到最后一行且光标移到第一行
7 if (selCmd != null && selCmd.Length > 0 && selCmd != "\r\n")
8 {
9 String strLeft = txtStr.Remove(start, selCmd.Length);
10
11 //处理剩下的字符串,注意把开头结尾的"\r\n"找到删掉
12
13 while (strLeft != null && strLeft.Length > 0 && (strLeft[strLeft.Length - 1] == '\r' || strLeft[strLeft.Length - 1] == '\n'))
14 {
15 strLeft = strLeft.Remove(strLeft.Length - 1, 1);
16 }
17
18 while (strLeft != null && strLeft.Length > 0 && strLeft[0] == '\r')
19 {
20 strLeft = strLeft.Remove(0, 2);
21 }
22
23 //处理你取出的当前行的字符串若有"\r\n"注意把它去掉
24 while (selCmd != "" && selCmd.Length > 0 &&
25 (selCmd[selCmd.Length - 1] == '\r'
26 || selCmd[selCmd.Length - 1] == '\n'))
27 {
28 selCmd = selCmd.Remove(selCmd.Length - 1, 1);
29 }
30
31 String strNew = strLeft + "\r\n" + selCmd;
32 //最后前面留一行空格且把鼠标定位到此
33 txtCmdInput.Text = "\r\n" + strNew;
34 }
35 else
36 {
37 MessageBox.Show("请您不要发送空命令,谢谢合作!", "温馨提示:");
38 }
39 }
40 private String GetCmd(TextBox txtCmdInput)//取控件里鼠标所在行或光标所选择的命令,发送的命令暂时写到文件中
41 {
42 string txtStr = txtCmdInput.Text;
43 string selStr = txtCmdInput.SelectedText;
44 string selCmd = null;
45 int start = 0;
46 if (selStr != null && selStr.Length > 0)
47 {
48
49 int selBegin = txtStr.IndexOf(selStr);
50 int selEnd = selBegin + selStr.Length - 1;
51 string subPreStr = txtStr.Substring(0, selBegin);
52 string subLastStr = txtStr.Substring(selEnd + 1);
53 string preleft = null;
54 string lastleft = null;
55 if (subPreStr.Length > 0 && subPreStr[subPreStr.Length - 1] != '\n')
56 {
57 int nindex = subPreStr.LastIndexOf("\n");
58 preleft = subPreStr.Substring(nindex + 1);
59 }
60 if (subLastStr.Length > 0 && subLastStr[0] != '\r')
61 {
62 int rindex = subLastStr.IndexOf("\r");
63 if (rindex != -1)
64 {
65 lastleft = subLastStr.Substring(0, rindex + 2);
66 }
67 else lastleft = null;
68 }
69 else if (subLastStr != null && subLastStr.Length > 0 && subLastStr[0] == '\r')
70 {
71 lastleft = "\r\n";
72 }
73 selStr = preleft + selStr + lastleft;
74 start = txtStr.IndexOf(selStr);
75 selCmd = selStr;
76 }
77 else
78 {
79 //取光标所在行的字符串包括末尾的换行回车符"\r\n"
80 //string strCmdText = txtCmdInput.Text;
81 int curInx = txtCmdInput.SelectionStart; //光标所在位置索引
82 string tmp = txtStr.Substring(0, curInx); //开始到光标处的子串
83 int n = tmp.LastIndexOf('\n'); //找光标所在行的开头索引start + 1
84 start = n + 1;
85 tmp = txtStr.Substring(curInx);//当前光标所在位置到最后的子串
86 int end = tmp.IndexOf('\n'); //找该行的末尾索引包括"\r\n"
87 string curRowText = null;
88 if (end > 0)
89 {
90 curRowText = txtStr.Substring(start, curInx - start + end + 1);
91 }
92 else
93 {
94 curRowText = txtStr.Substring(start);
95 }
96 selCmd = curRowText;
97 }
98 //MoveCmdToLast(txtStr,selCmd);
99 //把光标所在行的命令写入文件中
100 FileStream fs = new FileStream("D:\\file.txt",FileMode.Append,FileAccess.Write);
101 StreamWriter sw = new StreamWriter(fs);
102 sw.Flush();
103 sw.Write(selCmd);
104 sw.Flush();
105 sw.Close();
106 return selCmd;
107 }
函数调用如下:2 {
3 String txtStr = txtCmdInput.Text;
4 int start = txtStr.IndexOf(selCmd);
5
6 //把选中行或光标所在行的命令送到最后一行且光标移到第一行
7 if (selCmd != null && selCmd.Length > 0 && selCmd != "\r\n")
8 {
9 String strLeft = txtStr.Remove(start, selCmd.Length);
10
11 //处理剩下的字符串,注意把开头结尾的"\r\n"找到删掉
12
13 while (strLeft != null && strLeft.Length > 0 && (strLeft[strLeft.Length - 1] == '\r' || strLeft[strLeft.Length - 1] == '\n'))
14 {
15 strLeft = strLeft.Remove(strLeft.Length - 1, 1);
16 }
17
18 while (strLeft != null && strLeft.Length > 0 && strLeft[0] == '\r')
19 {
20 strLeft = strLeft.Remove(0, 2);
21 }
22
23 //处理你取出的当前行的字符串若有"\r\n"注意把它去掉
24 while (selCmd != "" && selCmd.Length > 0 &&
25 (selCmd[selCmd.Length - 1] == '\r'
26 || selCmd[selCmd.Length - 1] == '\n'))
27 {
28 selCmd = selCmd.Remove(selCmd.Length - 1, 1);
29 }
30
31 String strNew = strLeft + "\r\n" + selCmd;
32 //最后前面留一行空格且把鼠标定位到此
33 txtCmdInput.Text = "\r\n" + strNew;
34 }
35 else
36 {
37 MessageBox.Show("请您不要发送空命令,谢谢合作!", "温馨提示:");
38 }
39 }
40 private String GetCmd(TextBox txtCmdInput)//取控件里鼠标所在行或光标所选择的命令,发送的命令暂时写到文件中
41 {
42 string txtStr = txtCmdInput.Text;
43 string selStr = txtCmdInput.SelectedText;
44 string selCmd = null;
45 int start = 0;
46 if (selStr != null && selStr.Length > 0)
47 {
48
49 int selBegin = txtStr.IndexOf(selStr);
50 int selEnd = selBegin + selStr.Length - 1;
51 string subPreStr = txtStr.Substring(0, selBegin);
52 string subLastStr = txtStr.Substring(selEnd + 1);
53 string preleft = null;
54 string lastleft = null;
55 if (subPreStr.Length > 0 && subPreStr[subPreStr.Length - 1] != '\n')
56 {
57 int nindex = subPreStr.LastIndexOf("\n");
58 preleft = subPreStr.Substring(nindex + 1);
59 }
60 if (subLastStr.Length > 0 && subLastStr[0] != '\r')
61 {
62 int rindex = subLastStr.IndexOf("\r");
63 if (rindex != -1)
64 {
65 lastleft = subLastStr.Substring(0, rindex + 2);
66 }
67 else lastleft = null;
68 }
69 else if (subLastStr != null && subLastStr.Length > 0 && subLastStr[0] == '\r')
70 {
71 lastleft = "\r\n";
72 }
73 selStr = preleft + selStr + lastleft;
74 start = txtStr.IndexOf(selStr);
75 selCmd = selStr;
76 }
77 else
78 {
79 //取光标所在行的字符串包括末尾的换行回车符"\r\n"
80 //string strCmdText = txtCmdInput.Text;
81 int curInx = txtCmdInput.SelectionStart; //光标所在位置索引
82 string tmp = txtStr.Substring(0, curInx); //开始到光标处的子串
83 int n = tmp.LastIndexOf('\n'); //找光标所在行的开头索引start + 1
84 start = n + 1;
85 tmp = txtStr.Substring(curInx);//当前光标所在位置到最后的子串
86 int end = tmp.IndexOf('\n'); //找该行的末尾索引包括"\r\n"
87 string curRowText = null;
88 if (end > 0)
89 {
90 curRowText = txtStr.Substring(start, curInx - start + end + 1);
91 }
92 else
93 {
94 curRowText = txtStr.Substring(start);
95 }
96 selCmd = curRowText;
97 }
98 //MoveCmdToLast(txtStr,selCmd);
99 //把光标所在行的命令写入文件中
100 FileStream fs = new FileStream("D:\\file.txt",FileMode.Append,FileAccess.Write);
101 StreamWriter sw = new StreamWriter(fs);
102 sw.Flush();
103 sw.Write(selCmd);
104 sw.Flush();
105 sw.Close();
106 return selCmd;
107 }
private void txtCmdInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; / /回车事件已经处理完不再响应了
string str = GetCmd(txtCmdInput);
MoveCmdToLast(txtCmdInput, str);
}
}