vb.net 关于combobox的问题

添加了两个combox在combobox1中001,002,003,004,005在combobox2中张一,张二,张三,张四,张五DropDownstyle已经设置为D... 添加了两个combox
在combobox1中001,002,003,004,005
在combobox2中张一,张二,张三,张四,张五
DropDownstyle已经设置为DropDown

程序实现部分:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged

If ComboBox1.Items.Contains(ComboBox1.Text) Then
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
Else
MsgBox("无此学生,是否添加?", MsgBoxStyle.YesNo)
If MsgBoxResult.Yes Then
Dim name As String
name = InputBox("请输入姓名:")
ComboBox1.Items.Add(ComboBox1.Text)
ComboBox2.Items.Add(name)

End If
End If

End Sub
我想在combobox1输入0006,然后弹出对话框添加姓名,但是为什么上面的程序不会出现我预想的情况,达人们,帮忙看看
展开
 我来答
阴天的蓝色
2007-04-23 · TA获得超过396个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:125万
展开全部
首先你得这段代码不应该放在这个事件里~
因为你输入新的编号并不触发这个事件,这个事件是当选择的索引改变时触发的。
还有哦~
你Msgbox(......)这句之后的
If MsgboxResult.Yes Then这是在判断什么??
其实你这个If实际在判断(Cbool(MsgboxResult.Yes)=True)
Msgboxresult.Yes是一个常量,转换成 Boolean类型 然后判断是否是True,这个地方是一个严重的错误!

实际你要判断的是Msgbox(....)这个对话框的返回结果,对吧。
要这样:
If Msgbox(......)=MsgboxResult.Yes Then
.....
....
End if
Msgbox返回一个结果就是MsgboxResult枚举,这样判断才可以。

先指出错误,现在说说该怎么办:

先发上来,然后再说,我怕一会回答不小心全弄没了。

代码改完了,累死我了。
我给改成了2个事件。
很多地方加了注释,好好看看注释,差不多就明白了。不会再问。

代码:
Private Sub ComboBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp
If ComboBox1.Items.Contains(ComboBox1.Text) Then

ComboBox1.SelectedIndex = ComboBox1.Items.IndexOf(ComboBox1.Text)
'因为给ComboBox1.SelectedIndex要赋值的话,也该变了Text属性,所以也触发了TextChanged事件,所以那里和ComboBox2同步选项了,下面就不用 ComboBox2.SelectedIndex = ComboBox1.SelectedIndex语句了。

ComboBox1.SelectAll() '这里把刚才所输入的数字全部选择上
ElseIf e.KeyCode = Keys.Enter AndAlso MsgBox("无此学生,是否添加?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
'我给你改一下,改成输入完编号后按下回车才算确认,否则每输入一个字符都询问一次,很不好 '这里加上了e,KeyCode=Keys.Enter意思 就是当回车的时候并且对话框为是的时候则执行下面的语句,这里用了AndAlso而没用And原因就是如果它不是回车的,那就没必要询问,AndAlso就是当第一条件都不满足的时候,就不判断第二个条件了。

Dim name As String
name = InputBox("请输入姓名:")

ComboBox1.Items.Add(ComboBox1.Text)
ComboBox2.Items.Add(name)
End If
End Sub

'’TextChanged只有两种情况,一种是选择项目后Text改变,一种是用户输入的
'’选择项目的话肯定有此项所以这里写了这个判断语句
'’用户输入的,也必定触发KeyUp事件,所以这里可以不写另一段If语句,放在那个事件里写
'’其实keyUp的那段可以放在这里写,我是为了判断输入的是否为回车,要利用KeyUp事件的e参数的KeyCode属性,所以放那里了。
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
If ComboBox1.Items.Contains(ComboBox1.Text) Then
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
End If
End Sub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式