1
private void MoveCmdToLast(TextBox txtCmdInput, String selCmd)//把所選中的命令移動(dòng)到最下一行然后顯示在文本框中
2
{
3
String txtStr = txtCmdInput.Text;
4
int start = txtStr.IndexOf(selCmd);
5
6
//把選中行或光標(biāo)所在行的命令送到最后一行且光標(biāo)移到第一行
7
if (selCmd != null && selCmd.Length > 0 && selCmd != "\r\n")
8
{
9
String strLeft = txtStr.Remove(start, selCmd.Length);
10
11
//處理剩下的字符串,注意把開頭結(jié)尾的"\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
//處理你取出的當(dāng)前行的字符串若有"\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
//最后前面留一行空格且把鼠標(biāo)定位到此
33
txtCmdInput.Text = "\r\n" + strNew;
34
}
35
else
36
{
37
MessageBox.Show("請(qǐng)您不要發(fā)送空命令,謝謝合作!", "溫馨提示:");
38
}
39
}
40
private String GetCmd(TextBox txtCmdInput)//取控件里鼠標(biāo)所在行或光標(biāo)所選擇的命令,發(fā)送的命令暫時(shí)寫到文件中
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
//取光標(biāo)所在行的字符串包括末尾的換行回車符"\r\n"
80
//string strCmdText = txtCmdInput.Text;
81
int curInx = txtCmdInput.SelectionStart; //光標(biāo)所在位置索引
82
string tmp = txtStr.Substring(0, curInx); //開始到光標(biāo)處的子串
83
int n = tmp.LastIndexOf('\n'); //找光標(biāo)所在行的開頭索引start + 1
84
start = n + 1;
85
tmp = txtStr.Substring(curInx);//當(dāng)前光標(biāo)所在位置到最后的子串
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
//把光標(biāo)所在行的命令寫入文件中
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
}
函數(shù)調(diào)用如下:
2



3

4

5

6

7

8



9

10

11

12

13

14



15

16

17

18

19



20

21

22

23

24

25

26

27



28

29

30

31

32

33

34

35

36



37

38

39

40

41



42

43

44

45

46

47



48

49

50

51

52

53

54

55

56



57

58

59

60

61



62

63

64



65

66

67

68

69

70



71

72

73

74

75

76

77

78



79

80

81

82

83

84

85

86

87

88

89



90

91

92

93



94

95

96

97

98

99

100

101

102

103

104

105

106

107

private void txtCmdInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; / /回車事件已經(jīng)處理完不再響應(yīng)了
string str = GetCmd(txtCmdInput);
MoveCmdToLast(txtCmdInput, str);
}
}