WM中的OutLook开发和操作

  昨天闲来无视,学习了一下WM的基本开发。看WM有约的那套教程心里痒痒,于是下载了SDK,看看DEMO,在Sample中的示例进行加工。小有一点心得。其实总的来说难度也不是很大,以前没有做过FORM的程序,都是WEB上面的开发,上手来看不是那么特别的困难也。

  • 如果大家不明白安装了SDK之后,如何简历新的项目,如何做调整属性和模拟器的使用。可以参考我的文章下面的,讲的非常的清楚。这里我就不过多的浪费时间做些重复的事情了。
  • 还是先看看效果好了,功能是比较简单的。建立自己的OutLook联系人,对其进行信息的发送和详细信息的管理。
  • wmLearning1
  • 以上是功能的初始界面。没什么多说的。联系人的管理。ADD功能可以跳转到手机的电话簿进行添加。
  • WMLearning2
  • 选中了联系人之后。进行编辑。或者是新建联系人界面也是如此的。OK保存,也就是Update。
  • WMLearning4
  • ADD之后的界面。
  • WMLearning3
  • ContractedBlock.gifExpandedBlockStart.gifCode
    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.WindowsMobile.PocketOutlook;
    using Microsoft.WindowsMobile.Forms;
    using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;

    namespace SmsDefence
    {
        
    public partial class Form1 : Form
        {
            
    private Contact contactSelect;
            
    private OutlookSession outLookSession;
            
    public Form1()
            {
                
    this.outLookSession = new OutlookSession();
                InitializeComponent();
                
    this.InitializeListBox();
            }

            
    public Contact Select()
            {
                
    this.ShowDialog();
                
    return this.contactSelect;
            }
            
    private void InitializeListBox()
            {
                
    this.listBox1.DataSource = null;
                
    this.listBox1.DataSource = this.outLookSession.Contacts.Items;
                
    this.listBox1.DisplayMember = "FileAs";
                
    this.listBox1.ValueMember = "ItemId";
            }
            
    private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(
    "AlexLiu Software Development""Warning", MessageBoxButtons.OK,
       MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
            }

            
    private void menuItem1_Click(object sender, EventArgs e)
            {
                CreateNewConversation();
            }

            
    private void menuItem2_Click(object sender, EventArgs e)
            {
                
    this.Close();
            }

            
    private class Conversation
            {
                
    private Contact contact;
                
    private string transcript;
                
    private string phoneNumber;

                
    public Conversation(Contact c)
                {
                    contact 
    = c;
                    phoneNumber 
    = c.MobileTelephoneNumber;
                }

                
    public Contact Contact
                {
                    
    get { return contact; }
                }
                
    public string Transcript
                {
                    
    get { return transcript; }
                }
                
    public void AddToTranscript(string sender, string msg)
                {
                    transcript 
    = sender + ":" + msg + "\r\n" + transcript;
                }
                
    public string PhoneNumber
                {
                    
    get { return phoneNumber; }
                }
                
    public override string ToString()
                {
                    
    return contact.ToString();
                }
            }
            
    private void CreateNewConversation()
            {
                Conversation currentConv 
    = null;
                ChooseContactDialog dlg 
    = new ChooseContactDialog();
                dlg.RequiredProperties 
    = new ContactProperty[] { ContactProperty.AllTextMessaging };
                
    if (dlg.ShowDialog() == DialogResult.OK)
                {
                    
    foreach (Conversation conv in listBox1.Items)
                    {
                        
    if (conv.Contact.ItemId == dlg.SelectedContact.ItemId)
                        {
                            currentConv 
    = conv;
                            
    break;
                        }
                    }
                }
                
    if (currentConv == null)
                {
                    currentConv 
    = new Conversation(dlg.SelectedContact);
                    listBox1.Items.Add(currentConv);
                }
                SwitchToConversation(currentConv);
            }
            
    private void SwitchToConversation(Conversation conversion)
            {
                listBox1.SelectedItem 
    = conversion;
                txtMsg.Focus();
                
            }

            
    private void button5_Click(object sender, EventArgs e)
            {
                
    this.Close();
            }

            
    private void btnNew_Click(object sender, EventArgs e)
            {
                
    this.contactSelect = new Contact();
                
    this.outLookSession.Contacts.Items.Add(contactSelect);
                ContactEdit contactDialog 
    = new ContactEdit();
                contactDialog.Edit(
    ref contactSelect);
                
    this.InitializeListBox();
            }

            
    private void btnEdit_Click(object sender, EventArgs e)
            {
                
    if (this.listBox1.SelectedItem != null)
                {
                    contactSelect 
    = this.listBox1.SelectedItem as Contact;
                    ContactEdit contactDialog 
    = new ContactEdit();
                    contactDialog.Edit(
    ref contactSelect);
                }
                
    else { MessageBox.Show("you must select one contact"); }
            }

            
    private void btnSend_Click(object sender, EventArgs e)
            {
                
    try
                {
                    contactSelect 
    = this.listBox1.SelectedItem as Contact;
                    
    if (null == this.outLookSession.SmsAccount)
                    {
                        
    throw new ArgumentException("this account is not i");
                    }
                    SmsMessage s 
    = new SmsMessage(contactSelect.MobileTelephoneNumber, this.txtMsg.Text);
                    s.Body 
    = this.txtMsg.Text;
                    s.Send();
                    MessageBox.Show(
    "Message Sent");
                }
                
    catch (NullReferenceException ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
    }
  • 简要说明下:首先是Send方法,如果联系人的手机号码,不为空的话就可以进行信息的发送了。如果不为空,SDK中为我们提供了一个SmsMessage也是就是短信的发送类。新建一个对象s,初始化要指定发送的信息的内容的收件人的手机号码。s的body属性也就是信息体,是要发送的内容。对象的实例s调用Send()方法即可发送了。在Mobile中常用的也是对话框的弹出了。MessageBox.Show方法有几个重载的使用,其中最简单的就是指定弹出对话框所要显示的内容了。新建和编辑函数中的内容大体上面来说也是差不多的,新建的话就是把选中的联系人加入到OutLookSession联系中去。CreateNewConversation()函数,也就是点击ADD之后触发这个函数了,把联系人中的不重复加入进来。ChooseContactDialog这个类,建立一个对象之后,通过对象调用了ShowDialog方法即可进入到手机电话簿中联系人的选取中去。
  • ContractedBlock.gifExpandedBlockStart.gifCode
    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.WindowsMobile.Forms;
    using Microsoft.WindowsMobile.PocketOutlook;

    namespace SmsDefence
    {
        
    public partial class ContactEdit : Form
        {
            
    private Contact contactCreate;
            
    public ContactEdit()
            {
                InitializeComponent();
            }

            
    private void menuItem2_Click(object sender, EventArgs e)
            {
                
    this.Close();
            }

            
    private void menuItem1_Click(object sender, EventArgs e)
            {
                
    this.Close();
            }

            
    public void Edit(ref Contact contact)
            {
                contactCreate 
    = contact;
                
    this.ShowDialog();
            }

            
    private void ContactEdit_Load(object sender, EventArgs e)
            {
                
    this.txtFirstName.DataBindings.Add("text"this.contactCreate, "FirstName");
                
    this.txtLastName.DataBindings.Add("text"this.contactCreate, "LastName");
                
    this.txtCompany.DataBindings.Add("text"this.contactCreate, "CompanyName");
                
    this.txtEmail.DataBindings.Add("text"this.contactCreate, "Email1Address");
                
    this.txtWorkPhone.DataBindings.Add("text"this.contactCreate, "BusinessTelephoneNumber");
                
    this.txtMobile.DataBindings.Add("text"this.contactCreate, "MobileTelephoneNumber");
            }

            
    private void btnOK_Click(object sender, EventArgs e)
            {
                
    this.contactCreate.FileAs = this.contactCreate.LastName + "," + this.contactCreate.FirstName;
                
    this.contactCreate.Update();
                
    this.Close();
            }
        }
    }
  • 以上的代码是另一个FORM的内容。其主要功能就是对联系人进行编辑或者是新建:当点击OK的时候触发的也就是BTNOK这个onclick时间了,重要的一个方法就是Update()对所做的操作进行更新。Close()我想不必说了。FORM的关闭。Edit方法中无非就是数据的绑定。
  • 参考文章 WM有约:http://www.cnblogs.com/allenlooplee/archive/2009/01/14/1375941.html?CommentID=1440147#Post

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果手机运行python_iPhone是卖的最好的手机?用Python照样把他玩弄鼓掌之间!

关于 iOS 的技术解读有很多,但是却鲜有设备可视化同步的介绍文章。本文一起了解下这个酷炫的 iOS 黑科技。我们的任务很简单——如上图所示,实时获取设备的当前方向。 UIDevice.current.orientation 首先,需要调用 beginGeneratingDeviceOrie…

这几个动图告诉你科学的神奇,看完瞬间觉得智商都提高了

生活中简单平常的事物和现象背后,往往有着奇妙的原理,赶快跟着一起来看看涨点知识吧! 夹心雪糕的制作原理 ▼ 难怪雪糕大小,厚度都一模一样 原来都是从一个模子里出来的 ▼ 煎饼可以统一翻面 再也不用担心烤焦了 ▼ 冰淇淋蛋筒的制…

自定义 ocelot 中间件输出自定义错误信息

自定义 ocelot 中间件输出自定义错误信息Introocelot 中默认的 Response 中间件在出错的时候只会设置 StatusCode 没有具体的信息,想要展示自己定义的错误信息的时候就需要做一些自定义了,对 ocelot 中的 Response 中间件做了一些小改动,实现…

盘点小坏蛋的礼物

我们家小坏蛋一天天长大了,妈妈从觉得很辛苦过渡到习惯了很辛苦,苦中作乐的妈妈终于抽出空来写博客啦! 为什么叫他小坏蛋呢?因为他吃饭不乖。没满月的时候蛮乖的,每顿奶都吃的很香,咕咚咕咚的喝下去&#x…

为什么对gRPC做负载均衡会很棘手?

在过去的几年中,随着微服务的增长,gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台,gRPC使用http/2在同一连接和双工流中复用许多请求。使用具有结构化数据的快速,轻便的二进制协议作为服务之间的通信介质确实很有吸…

给新手程序猿的16个必备小妙招

写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler,并且学…

python字符串设置字体_python怎么更改字符串后几位

python更改字符串后几位的方法:可以利用replace()函数来实现。replace()函数可以把字符串中的旧字符串替换成新字符串,并返回替换后的新字符串。具体使用方法如:【str.replace("is", "was")】。可以利用replace()函数来修…

程序猿的双十一最佳攻略

讲个恐怖故事 一年一度虐汪“光棍节”又来了 小天拍拍(不存在的)胸脯告诉大家 这个节日 我陪你们 买买买! 限时特惠专场 1 welcome 7天教你学会数学建模及Matlab编程 数学建模涉及的内容比较广泛,比如碎纸片问题中所涉及的图像识…

关于Word中审阅的一个问题!

前两天,在帮一个杂志撰稿的过程中,有一个关于Word审阅的问题。(以下内容以Word2007为例) 本身,审阅的应用不算困难。 我们可以为文章添加“批注”,或是你的上级对文章进行修改,他们可以开启“审…

ASP.NET Core - 在ActionFilter中使用依赖注入

上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档。发现除了IActionFilter、IAsyncActionFilter的问题,还有一个就是依赖注入在ActionFilter上的使用也是需要注意的…

魏尔斯特拉斯函数与分形图形的动画演示

一般人会直觉上认为连续的函数必然是近乎可导的。即使不可导,所谓不可导的点也必然只占整体的一小部分。根据魏尔斯特拉斯在他的论文中所描述,早期的许多数学家,包括高斯,都曾经假定连续函数不可导的部分是有限或可数的。这可能是…

大脚战场插件怎么关闭_PM工具栏插件:HonmToolBar

视频演示:问:HonmToolBar是一款什么样的插件?答:HonmToolBar是一款高度自由化的插件,用户可以自己增加宏文件按钮或者宏命令按钮。该插件类似工具栏,有水平和垂直两个工具栏。插件悬浮在PM图形窗口左上角&a…

android 导航 美国,变美了 Android N或用全新虚拟导航按键

原标题:变美了 Android N或用全新虚拟导航按键变美了 Android N或用全新虚拟导航按键【IT168 资讯】虽然距离谷歌Android N系统的发布已经有一段时间了,不过该系统目前仍旧属于内测阶段,短时间内仍难以迅速推广。另外也正是由于Android N正式…

python特性和属性_Python面向对象-类的特性及公私有属性 | 【韩涛博客】

构造函数 __init__ self.name name #属性,成员变量,字段 def sayhi() #方法,动态属性 公有属性 在类中直接定义的属性,大家都可以用 私有属性 __两个下划线定义,外部不可以访问,内部可以访问 class Role(o…

[Abp 源码分析]自动审计记录

点击上方蓝字关注我们0.简介Abp 框架为我们自带了审计日志功能,审计日志可以方便地查看每次请求接口所耗的时间,能够帮助我们快速定位到某些性能有问题的接口。除此之外,审计日志信息还包含有每次调用接口时客户端请求的参数信息,…

我的老公是枚码农

前两天看到一篇写程序员的爆文,虽然略显夸张,但也着实有趣。忽然想到身边人也是一枚码农,浑身上下也是浓厚的码农气息,遂也胡乱写了几笔,博君一笑,为了方便起见,就称其为“码农哥”。 1 码农哥还…

harmonyos con,鸿蒙HarmonyOS系统中的JS开发框架

HarmonyOS开源至今已经一个多月,源码托管在国内知名开源平台码云上,https://gitee.com/openharmony 。我最感兴趣的就是JS 框架 ace_lite_jsfwk,从名字中可以看出来这是一个非常轻量级的框架,官方介绍说是“轻量级 JS 核心开发框架…

.NET工资低?那肯定是你打开的方式不正确

点击上方蓝字关注我们因为工作的关系,本人总是会接触到一些刚踏入社会没多久的.NET开发小伙伴。尤其是年关将近,这时候想要跳槽的人特别多,所以收到一些小伙伴的迷茫求解。今天就拿其中一个来说,我们暂且称他为A同学吧。A同学是一…

10分钟读懂人工智能、机器学习到底有什么关系

文末彩蛋,错过哭一年。。。。 人工智能的浪潮正在席卷全球,诸多词汇时刻萦绕在我们耳边:人工智能(Artificial Intelligence)、机器学习(Machine Learning)。不少人对这些高频词汇的含义及其背后…

苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...

原标题:华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额华为鸿蒙操作系统发布已经有一段时间了,这个操作系统直到上个月月底才开启了公测,很多用户都已经使用上了华为的这个鸿蒙操作系统。根据不少用户的反馈情况来看&#xff…