许多联系人管理程序都这样做 - 你输入一个名字(例如,"John W. Smith"),它会自动将其分解为:
名字:约翰
中间名: W.
姓:史密斯
同样,它也会找出像"简·史密斯夫人"和"约翰·多伊博士"这样的事情.也正确(假设您允许名称中包含"prefix"和"suffix"等字段).
我认为这是人们想要做的相当普遍的事情......所以问题是......你会怎么做?有一个简单的算法吗?也许正则表达式?
我正在使用.NET解决方案,但我并不挑剔.
更新:我感谢没有简单的解决方案可以涵盖所有边缘案例和文化...但是,为了论证,你需要说明你需要这个名字(填写表格 - 比如说,税收或其他政府表格 - 是一种情况,您必须将名称输入固定字段,无论您是否喜欢),但您不一定要强迫用户将其名称输入到离散字段中(减少输入=更容易新手用户).
你想让程序"猜测"(尽可能最好)在第一个,中间的,最后一个等等.如果可以的话,看看Microsoft Outlook如何为联系人做这个 - 它让你输入名字,但是如果你需要澄清,你可以打开一个额外的小窗口.我会做同样的事情 - 给用户提供窗口以防他们想要以离散的部分输入名称 - 但允许在一个框中输入名称并进行涵盖大多数常见名称的"最佳猜测" .
看起来当你有一个WinForms .NET应用程序和一个ComboBox(设置为"DropDown"样式),并且ComboBox中有多个相同的项目时,会发生奇怪的事情.具体而言,所选项的索引可以更改,而不会触发SelectedIndexChanged事件.
当然,这会引起大规模的混乱和奇怪的,模糊的错误,这就是我最近一直把头发拉出来的原因.
这是一个简单的例子,你可以用来看我在说什么:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
TextBox1.Text = TextBox1.Text & vbNewLine & "ComboBox SelectedIndexChanged event fired." & vbNewLine & _
"SelectedIndex is: " & ComboBox1.SelectedIndex
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ComboBox1.Items.Add("John Doe")
ComboBox1.Items.Add("John Doe")
ComboBox1.Items.Add("John Doe")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text …Run Code Online (Sandbox Code Playgroud) 有时在使用默认配置系统的.NET(2.0)WinForm桌面应用程序中,该user.config文件将被破坏并且无法再加载(当配置系统尝试加载它时,它将抛出一个System.Xml.XmlException).
抛开"为什么文件首先被破坏"的问题(可能是宇宙射线,或HDD问题,或者你无法控制的其他东西),问题就变成了"怎么能抓住这个异常和做一些有意义的事情吗?
Microsoft的Connect站点有关于此类问题的报告.不幸的是,他们的报告不是很有帮助.
是否有可能捕获源自默认配置系统加载器本身的异常?或者您是否必须推出自己的配置系统才能捕获此类异常?