【UWP应用开发实战】第二弹 移动版秒变桌面版 实践:罗马数计算器
来源:互联网 发布:qq飞车摄魂数据 编辑:程序博客网 时间:2024/05/29 09:09
背景
想想通用应用平台终于诞生了,正好又碰到两个挺有意思的题目:
传送门:LeetCode 12 Integer to Roman(整型数到罗马数)
传送门:LeetCode 13 Roman to Integer(罗马数到整型数)
于是就打算将它们整合成个一个简单的App吧,虽然功能不多,但万一有用户需要呢?常规的计算器功能我没实现,系统自带的已经非常好了。
个人是很喜欢Pivot控件的,可以左右滑动,挺好使的。这里就用它了,和UWP搭配,堪称完美。
界面
具体布局代码我就不细说了,感觉实在没什么好说了,相信看过前面写的Windows App系列文章的童鞋们都可以实现出来了,我就直接上截图了。
先来看看移动版的(补充一个段子吧,微软宣布Windows 10 Mobile中文名叫做Windows 10 移动版,那以后手机岂不是有Windows 10 移动版移动版和Windows 10 移动版联通版了),这里我还留了挺多空格没有使用,后续如果发现有什么功能需要跟进再进行补充了。
通用应用超赞的亮点
如果你还没有开发过通用应用,那我来教你如何秒变桌面版吧。在下面所示的窗口中,你就可以自由切换了,即便是IoT(Internet of Things)也是可以的喔,还有强大的Surface Hub。
切换之后呢?duang……
预警……下面是关键部分!
但是,用过Windows 10 的童鞋们都知道所有App都是可以随意放大以及缩小的,那么我们也试试呢?
哈?这是咋回事……
放大设计器后,你就会发现这么小锁喔……
何不试试将小锁都锁上呢?我用GIF录制了一段,大家看看,有没有感觉很神奇呢?
相比Android上的各种适配问题,这个简直不要太赞呀!
开始筹备
那么就来实现具体功能好啦,其实吧,我感觉这部分都没必要写了,你所需要的就是这4个字符串,用于保存用户输入的字符串和输出,之所以各设置2个是因为这里既需要从阿拉伯数转罗马数,也需要从罗马数转阿拉伯数。
private string _readyToCalc = "";private string _output = "";private string _readyToCalc2 = "";private string _output2 = "";
那么对于要输出的各种数据呢,我就用的ListView,简单易用,还很省事。
<ListView Name="LvOutput" Grid.Row="0" DoubleTapped="LvOutput_DoubleTapped" />
键入数字(阿拉伯数和罗马数)
点击数字0的Click事件,其他的都是一样的了,共用AddNumber方法而已:
private void BtnName0_Click(object sender, RoutedEventArgs e){ AddNumber(0); TbInput.Text = _readyToCalc;}private void AddNumber(int num){ _readyToCalc += num.ToString();}
点击确定后的事件,也就是开始计算了。计算出_output后将它添加到LvOutput上。
private void BtnCalc_Click(object sender, RoutedEventArgs e) { try { int number = int.Parse(_readyToCalc); _output = IntToRoman(number); LvOutput.Items?.Add(_output); } catch (Exception) { // ignored } _readyToCalc = ""; TbInput.Text = ""; }
相应的清理按钮的事件:
private void BtnClear_Click(object sender, RoutedEventArgs e) { _readyToCalc = ""; TbInput.Text = ""; } private void BtnClearRecord_Click(object sender, RoutedEventArgs e) { LvOutput.Items?.Clear(); }
罗马数字的也一样了:
private void BtnNameI_Click(object sender, RoutedEventArgs e) { AddRoman("I"); TbInput2.Text = _readyToCalc2; } private void AddRoman(string roman) { _readyToCalc2 += roman; } private void BtnCalc2_Click(object sender, RoutedEventArgs e) { try { _output2 = RomanToInt(_readyToCalc2).ToString(); LvOutput2.Items?.Add(_output2); } catch (Exception) { // ignored } _readyToCalc2 = ""; TbInput2.Text = ""; } private void BtnClear2_Click(object sender, RoutedEventArgs e) { _readyToCalc2 = ""; TbInput2.Text = ""; } private void BtnClearRecord2_Click(object sender, RoutedEventArgs e) { LvOutput2.Items?.Clear(); }
双击复制
对于用户输入的阿拉伯数,应用给转换成了罗马数,但还得用户自己记下来再到其他地方键入,是不是不太合理?所以,这里应该有一个双击复制的功能。
private void LvOutput_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e){ DataPackage dp = new DataPackage(); if (LvOutput.SelectedItem != null) { dp.SetText(LvOutput.SelectedItem.ToString()); Clipboard.SetContent(dp); }}
关于复制图片,这里还有一部分,传送门:Windows App开发之集成设置、帮助、搜索和共享 ,请自行找到第三部分“使用粘贴板”。
如何进行计算呢
public enum Roman { M = 1000, CM = 900, D = 500, CD = 400, C = 100, XC = 90, L = 50, XL = 40, X = 10, IX = 9, V = 5, IV = 4, I = 1 };
public int RomanToInt(string s){ int result = 0; Type R = typeof(Roman); string first, second; if (s.Length > 1) { first = s.Substring(0, 1); second = s.Substring(0, 2); } else { first = s.Substring(0, 1); second = ""; } foreach (var r in Enum.GetNames(R).Reverse()) { while ((r.Length == 1 && first == r) || (r.Length == 2 && second == r)) { result += int.Parse(Enum.Format(R, Enum.Parse(R, r), "d")); int lenR = r.Length, lenS = s.Length; if (lenS - lenR < 1) s = ""; else s = s.Substring(lenR, lenS - lenR); if (s.Length > 1) { first = s.Substring(0, 1); second = s.Substring(0, 2); } else if (s.Length == 1) { first = s.Substring(0, 1); second = ""; } else { first = ""; second = ""; } } } return result;}public string IntToRoman(int num){ string result = ""; Type R = typeof(Roman); foreach (var r in Enum.GetNames(R).Reverse()) { while (num >= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d"))) { result += r.ToString(); num -= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d")); } } return result;}
结语
自我感觉写这篇博客的时间比写这个
大家可以下载看看,传送门:罗马数计算器 。
大家有什么建议或意见欢迎告诉我(邮箱在博客左侧边栏),一起改进这个应用,当然了,如果你自己写一遍然后发到应用商店我也不介意。
号外
求投票或转发支持呀……希望我不要死得太惨了……
请点击这里:投票
投票从10号开始一直持续到20号,拜托各位了!
——————当然你也可以直接点击图片啦
- 【UWP应用开发实战】第二弹 移动版秒变桌面版 实践:罗马数计算器
- 【UWP应用开发实战】第一弹 使用剪切板
- 斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现(mvc实战)
- 【UWP开发】uwp应用安装失败
- android应用开发实践二----控件学习的计算器实践
- [UWP开发] Cortana启动应用
- 【UWP通用应用开发】编辑文本、绘制图形、3D透视效果及绘制时钟实战
- 移动混合应用Hybrid App开发实战
- 移动云应用开发最佳实践
- 【UWP开发】如何通过unity发布win10 uwp应用
- 【UWP通用应用开发】控件、应用栏
- Electron 实战桌面计算器应用
- 1.2 UWP 应用开发准备篇
- uwp 简单尝试计算器
- POJ-3448(罗马计算器)
- 《Android应用开发实战(第二版)》学习记录
- Gartner: 传统应用程序开发实践将对移动应用失效
- 罗马数表示整数
- 每天一个linux命令(18):route命令
- spring ioc原理
- 并查集
- MKDEV MAJOR MINOR
- robotium 测试常见问题
- 【UWP应用开发实战】第二弹 移动版秒变桌面版 实践:罗马数计算器
- xcode7
- 20151024考试总结
- linux命令---ifconfig命令
- 青春
- 排序算法——希尔排序
- 如何创建数据库表之间的关联关系
- cdev_add alloc_chrdev_region 系列函数
- Java 的 ArrayList 的底层数据结构