WPF中使用Hashtable剔除重复字符串(比如电话号码)
原文:WPF中使用Hashtable剔除重复字符串(比如电话号码)
本文中的输入框中的字符串是逗号隔开的,你可以换成其他特别的字符串.
本篇中的亮点:
1. 里面有一个玻璃样式按钮,用XAML制作
2. WPF下TextBox允许多行文本的设置
3. 使用Hashtable剔除重复字符串(比如电话号码)
运行时的样子:(为了保护隐私,做了虚化及其他处理)
WPF下TextBox允许多行文本的设置:
需要:
(1)将TextWrapping设为"Wrap"
(2)将AcceptsReturn设为"True"
(3)将VerticalScrollBarVisibility设置为"Visible"
<TextBox Margin="11,121,11,15" Name="txtBoxTel" Tag="输入列表,用逗号隔开" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible"></TextBox>
具体参见这里:http://msdn2.microsoft.com/en-us/library/ms742157.aspx
下面XAML代码和C#代码使用Hashtable实现剔除以逗号隔开的字符串:
<Grid
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="#FFFFFFFF"
x:Name="DocumentRoot"
x:Class="UntitledProject1.Scene1"
Width="640" Height="480">
<Grid.Resources>
<Storyboard x:Key="OnLoaded"/>
<ControlTemplate x:Key="GlassButton" TargetType="{x:Type Button}">
<Grid x:Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.30*"/>
<ColumnDefinition Width="0.70*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Rectangle RadiusX="9.5" RadiusY="9.5" StrokeThickness="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,0" Width="Auto" Height="Auto" x:Name="Rectangle" Grid.ColumnSpan="2">
<Rectangle.Stroke>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.RelativeTransform>
<TransformGroup>
<TranslateTransform X="-0.5" Y="-0.5"/>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<RotateTransform Angle="-120"/>
<TranslateTransform X="0.5" Y="0.5"/>
</TransformGroup>
</LinearGradientBrush.RelativeTransform>
<GradientStop Color="DarkBlue" Offset="0"/>
<GradientStop Color="#FF0044FF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Stroke>
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.RelativeTransform>
<TransformGroup>
<TranslateTransform X="-0.5" Y="-0.5"/>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="-134.21615637340656"/>
<TranslateTransform X="0.5" Y="0.5"/>
<TranslateTransform X="0" Y="1.1102230246251565E-16"/>
</TransformGroup>
</LinearGradientBrush.RelativeTransform>
<GradientStop Color="sc#1, 0.19747445, 0.5656454, 0.8154832" Offset="0"/>
<GradientStop Color="sc#1, 0.0365921259, 0.134746253, 0.638337433" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Image Margin="10.0870444752514,11.2317796742785,10.0870444752514,11.2317796742784" x:Name="vista_png" Source="vista.png"/>
<TextBlock FontSize="22" FontFamily="黑体" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0" Width="Auto" x:Name="TextBlock" Grid.Column="1" Grid.ColumnSpan="2" Foreground="#FFFFFFFF" Text="玻璃按钮" TextWrapping="Wrap"/>
<Path Stroke="{x:Null}" StrokeThickness="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5.50301444227762,5.28670889641099,5.45587888360024,10.5438191677396" Width="Auto" Height="Auto" x:Name="Path" Grid.ColumnSpan="2" RenderTransformOrigin="0.5,0.5" Stretch="Fill" Data="M8.1022701,17.799688 C7.3544157,11.583093 9.8522114,8.0085448 16.349833,7.6899629 L250.16826,7.8843801 C256.14965,8.0045337 259.63309,10.688788 259.03439,16.633179 L258.8282,31.797765 C164.51944,24.560953 80.727082,36.104513 8.3084562,67.959472 z">
<Path.RenderTransform>
<TransformGroup>
<TranslateTransform X="0" Y="0"/>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Path.RenderTransform>
<Path.Fill>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.RelativeTransform>
<TransformGroup>
<TranslateTransform X="-0.5" Y="-0.5"/>
<ScaleTransform ScaleX="0.42070697804067081" ScaleY="0.42070697804067081"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="-278.63046519289236"/>
<TranslateTransform X="0.5" Y="0.5"/>
<TranslateTransform X="-0.02811997223844305" Y="-0.28845321875685026"/>
</TransformGroup>
</LinearGradientBrush.RelativeTransform>
<GradientStop Color="sc#0.7, 1, 1, 1" Offset="0"/>
<GradientStop Color="sc#0.2, 1, 1, 1" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
</Grid>
</ControlTemplate>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Margin="10.592229483486,10.304722572417,0,0" x:Name="Button" Template="{DynamicResource GlassButton}" Content="Button" HorizontalAlignment="Left" Width="177" Click="GetTelNo" Height="64" VerticalAlignment="Top" />
<TextBox Margin="11,121,11,15" Name="txtBoxTel" Tag="输入列表,用逗号隔开" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible"></TextBox>
<TextBox Height="26" Margin="261,14,270,0" Name="txtBoxTelCount" VerticalAlignment="Top" Tag="条数"></TextBox>
<TextBox Height="65" Margin="260,49,12,0" Name="txtBoxRepeatTel" VerticalAlignment="Top" Tag="重复字串"></TextBox>
<Label Height="22.6866666666667" HorizontalAlignment="Left" Margin="200,15.3133333333333,0,0" Name="label1" VerticalAlignment="Top" Width="57">重复总数</Label>
<Label Height="22.6866666666667" HorizontalAlignment="Left" Margin="201,53,0,0" VerticalAlignment="Top" Width="57">重复字符</Label>
<Label Height="22.6866666666667" HorizontalAlignment="Left" Margin="11,92,0,0" VerticalAlignment="Top" Width="173">字符列表(用逗号隔开)</Label>
</Grid>
关键的C#代码:
void GetTelNo(object sender, RoutedEventArgs e)
{
string tels = txtBoxTel.Text;
string[] telArr = tels.Split(new char[] { ','});
txtBoxTelCount.Text = telArr.Length.ToString();
Hashtable ht = new Hashtable();
Hashtable htRepeat = new Hashtable();
for (int i = 0; i < telArr.Length; i++)
{
try
{
ht.Add(telArr[i], telArr[i]);
}
catch
{
htRepeat.Add(i.ToString(), telArr[i]);
}
}
StringBuilder sb = new StringBuilder();
ICollection valueColl = ht.Values;
foreach (string s in valueColl)
{
sb.Append(s + ",");
}
StringBuilder sbRepeat = new StringBuilder();
ICollection valueCollRepeat = htRepeat.Values;
foreach (string s in valueCollRepeat)
{
sbRepeat.Append(s + ",");
}
txtBoxTel.Text = sb.ToString().TrimEnd(new char[]{','});
txtBoxRepeatTel.Text = sbRepeat.ToString().TrimEnd(new char[] { ',' });
}
完整的代码下载:(无法上传源码,试了几次都不行,唉....)
附: Window Forms的代码:
// Form1.Designer.cs
namespace BrawDraw.Com.HashtableFaxNoReplace
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnGetTelNo = new System.Windows.Forms.Button();
this.txtBoxTel = new System.Windows.Forms.TextBox();
this.txtBoxRepeatTel = new System.Windows.Forms.TextBox();
this.txtBoxTelCount = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// btnGetTelNo
//
this.btnGetTelNo.Location = new System.Drawing.Point(489, 3);
this.btnGetTelNo.Name = "btnGetTelNo";
this.btnGetTelNo.Size = new System.Drawing.Size(57, 23);
this.btnGetTelNo.TabIndex = 0;
this.btnGetTelNo.Text = "转换";
this.btnGetTelNo.UseVisualStyleBackColor = true;
this.btnGetTelNo.Click += new System.EventHandler(this.btnGetTelNo_Click);
//
// txtBoxTel
//
this.txtBoxTel.Location = new System.Drawing.Point(5, 3);
this.txtBoxTel.MaxLength = 32767000;
this.txtBoxTel.Multiline = true;
this.txtBoxTel.Name = "txtBoxTel";
this.txtBoxTel.Size = new System.Drawing.Size(478, 272);
this.txtBoxTel.TabIndex = 1;
//
// txtBoxRepeatTel
//
this.txtBoxRepeatTel.Location = new System.Drawing.Point(5, 281);
this.txtBoxRepeatTel.Multiline = true;
this.txtBoxRepeatTel.Name = "txtBoxRepeatTel";
this.txtBoxRepeatTel.Size = new System.Drawing.Size(478, 190);
this.txtBoxRepeatTel.TabIndex = 2;
//
// txtBoxTelCount
//
this.txtBoxTelCount.Location = new System.Drawing.Point(490, 33);
this.txtBoxTelCount.Name = "txtBoxTelCount";
this.txtBoxTelCount.Size = new System.Drawing.Size(56, 21);
this.txtBoxTelCount.TabIndex = 3;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(558, 472);
this.Controls.Add(this.txtBoxTelCount);
this.Controls.Add(this.txtBoxRepeatTel);
this.Controls.Add(this.txtBoxTel);
this.Controls.Add(this.btnGetTelNo);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnGetTelNo;
private System.Windows.Forms.TextBox txtBoxTel;
private System.Windows.Forms.TextBox txtBoxRepeatTel;
private System.Windows.Forms.TextBox txtBoxTelCount;
}
}
// Form1.cs
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace BrawDraw.Com.HashtableFaxNoReplace
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGetTelNo_Click(object sender, EventArgs e)
{
string tels = txtBoxTel.Text;
string[] telArr = tels.Split(new char[] { '/r' });
txtBoxTelCount.Text = telArr.Length.ToString();
Hashtable ht = new Hashtable();
Hashtable htRepeat = new Hashtable();
for (int i = 0; i < telArr.Length; i++)
{
try
{
// 这里将电话区号0755去掉,以便后面将所有Fax号码加上0755
ht.Add(telArr[i], telArr[i].Replace("0755", "").Replace("/n", ""));
}
catch
{
htRepeat.Add(i.ToString(), telArr[i].Replace("/n", ""));
}
}
StringBuilder sb = new StringBuilder();
ICollection valueColl = ht.Values;
foreach (string s in valueColl)
{
// 加上电话区号0755
sb.Append("0755" + s + ",");
}
StringBuilder sbRepeat = new StringBuilder();
ICollection valueCollRepeat = htRepeat.Values;
foreach (string s in valueCollRepeat)
{
sbRepeat.Append(s + ",");
}
txtBoxTel.Text = sb.ToString().TrimEnd(new char[] { ',' });
txtBoxRepeatTel.Text = sbRepeat.ToString().TrimEnd(new char[] { ',' });
}
}
}
// Program.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BrawDraw.Com.HashtableFaxNoReplace
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
WPF中使用Hashtable剔除重复字符串(比如电话号码)的更多相关文章
- WPF中Binding使用StringFormat格式化字符串方法
原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...
- WPF中的TextBlock处理长字符串
Xaml: <StackPanel> <TextBlock Margin="10" Foreground="Red"> This is ...
- 找出字符串中第一个不重复的字符(JavaScript实现)
如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. //找出字符串中第一个不重复的字符 // firstUniqueChar("vdctdvc"); --& ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- java-ArrayList中去重复字符串或重复对象、LinkedList集合、泛型、增强for、静态导入、可变参数、asList()方法、集合嵌套
1.去除ArrayList中重复字符串元素方式 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 /** * A:案例演示 * 需求 ...
- leetCode 题解之字符串中第一个不重复出现的字符
1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doe ...
- 基于python 3.5 所做的找出来一个字符串中最长不重复子串算法
功能:找出来一个字符串中最长不重复子串 def find_longest_no_repeat_substr(one_str): #定义一个列表用于存储非重复字符子串 res_list=[] #获得字符 ...
- LeetCode 1047. 删除字符串中的所有相邻重复项(Remove All Adjacent Duplicates In String)
1047. 删除字符串中的所有相邻重复项 1047. Remove All Adjacent Duplicates In String 题目描述 LeetCode1047. Remove All Ad ...
- LeetCode.1047-重复删除字符串中的所有相邻重复项
这是小川的第389次更新,第419篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第251题(顺位题号是1047).给定一个小写字母的字符串S,重复删除两个相邻且相等的字母 ...
随机推荐
- Qt 信号-槽的同步与异步处理
通常使用的connect,实际上最后一个參数使用的是Qt::AutoConnection类型:Qt支持6种连接方式.当中3中最主要: 1.Qt::DirectConnection(直连方式)(信号与槽 ...
- C++中string类的操作函数。
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- Android百日程序:GridView实现相冊效果
本章使用GridView控件来做一个相冊效果. 图片效果例如以下: 响应点击事件,点击的时候提示是当前第几章图片.从左到右,从上到下. 点击了第一张图片,显示了1. 步骤: 一 新建项目,然后把图片资 ...
- ijkplayer阅读笔记02-创建音视频读取,解码,播放线程
本节主要介绍音视频读取和解码线程的创建及启动,代码流程例如以下: IjkMediaPlayer_prepareAsync{ ijkmp_prepare_async_l{ ijkmp_change_st ...
- jquery-4 完整表单验证实例
jquery-4 完整表单验证实例 一.总结 一句话总结:在form的jquery对象中返回false即可终止表单提交. 1.验证的显示错误消息如何布局? 开始时隐藏,出现错误后显示 10 .erro ...
- Snmp常用oid
http://blog.csdn.net/youngqj/article/details/7311849 系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2 ...
- LUA整合进MFC代码
这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口.组件,随便你怎么叫),希望能用脚本来控制主程序的行为.这实 ...
- [TypeScript] Use the never type to avoid code with dead ends using TypeScript
Example 1: A never stop while loop return a never type. function run(): never { while(true){ let foo ...
- Fragment嵌套Fragment时遇到的那些坑
由于项目要改成MVP模式,自然会用到了Fragment,有时候可能会需要一个Fragment里面嵌套多个Fragment,并且add完成后需要立即刷新子Fragment的View,那么这个时候就会抛出 ...
- 为何放弃 C++ 的工作(开发慢,难度高。完全不适应互联网的快速迭代的思想)
happypeter,2015年1月9日 昨天进燕山大学编程爱好者 QQ 群,看到有很多同学在学 C++ ,我当然是不喜欢了,因为我是做 Web 开发的嘛.所以怀着猥琐的心情,今天写篇傻傻的文章,来黑 ...