短信猫软件的实现(C#)<十一>软件实现(完结篇)
发送短信 目标号码部分:用listview控件实现,添加按钮完成单个号码的添加
Form9是添加号码窗体 通过事件AddNumEvent完成号码等信息的传递
Form9中对应代码:
事件的定义:
这样即完成了listview的号码添加。
删除号码:
这是从listview控件中删除对应条目,完成手机号码删除。
另外还有号码导入功能,完成多个号码的添加,目前只能从excel中导入;而且需要满足格式要求。代码如下:
1: private void button8_Click(object sender, EventArgs e)
2: {
3: //xPath指示excel文件路径
4: string xPath = null;
5: OpenFileDialog openFileDialog1 = new OpenFileDialog();
6: openFileDialog1.Filter = "Excel Files(*.xls)|*.xls";
7: openFileDialog1.Title = "导入手机号码";
8: listView2.SelectedItems.Clear();
9: // Show the Dialog.
10: // If the user clicked OK in the dialog and
11: // a .CUR file was selected, open it.
12: if (openFileDialog1.ShowDialog() == DialogResult.OK)
13: {
14: xPath = openFileDialog1.FileName;
15: string strCon;
16: strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xPath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
17: OleDbConnection OleConn = new OleDbConnection(strCon);
18: string sql = "SELECT * FROM [Sheet1$]";
19: DataSet ds = new DataSet();
20: try
21: {
22: OleConn.Open();
23: OleDbDataAdapter da = new OleDbDataAdapter(sql, strCon);
24: da.Fill(ds, "sheet1");
25: OleConn.Close();
26: }
27: catch
28: {
29: MessageBox.Show("无法打开!\n请关闭其他打开此文件的程序后再试");
30: }
31: DataTable dt = ds.Tables[0];
32: try
33: {
34: foreach (DataRow row in dt.Rows)
35: {
36: string str = row["手机号码"].ToString();
37: if (Regex.IsMatch(str, @"^(1[3|5|8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$"))
38: {
39: ListViewItem lvi = new ListViewItem(str);
40: lvi.SubItems.Add(row["姓名"].ToString());
41: lvi.SubItems.Add(row["备注"].ToString());
42: listView2.Items.Add(lvi);
43: }
44: else
45: {
46: MessageBox.Show("表格第二列不是手机号码或是有错误号码!\n请检查后再试");
47: break;
48: }
49: }
50: }
51: catch
52: {
53: MessageBox.Show("程序支持文件为前三列都有内容的xls表格\n第一列“姓名”,第二列“手机号码”,第三列“备注”");
54: }
55: }
56:
57: }
excel文件第一行前三列内容:第一列“姓名”,第二列“手机号码”,第三列“备注”,这样才能正常导入号码。
发送部分,类 MsgList负责存储要发送的短信及目的号码,对多存储255个号码(同一条短信)
下面是发送按钮的函数,首先判断字数及号码是否符合规范,上一条是否发送完成(群发 多个号码一条短信)如果完成,则准备发送:更改进度条和前面标签控件的相应属性,以给用户指示发送的状态。最后创建另外线程发送短信。
新建线程对应的函数:
发送一条或是失败、完成均调用SendOneMsg指向的函数OnSendOneMsg
OnSendOneMsg函数:
判断发送一条,或者失败,或者完成而改变控件属性,通知用户短信发送的当前状态。
这是对应委托和回调的声明,两个参数object sender, GSMEventArgs ge传递相关信息。
至此发送窗体部分完成。