请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

sxyweiren

中级会员

73

主题

366

帖子

755

积分

中级会员

积分
755

活字格认证微信认证勋章

sxyweiren
中级会员   /  发表于:2016-1-9 11:31  /   查看:5221  /  回复:1
现在的处理里面,含有控件GcMaskedComboBox,但是最近发现这个控件的SelectedIndexChanged的触发有些不正常。

代码会在下面进行粘贴。先说下操作动作。
①,画面初期启动,光标在移动到ComboBox里面,输入值 0 ,通过Tab键把光标移开,TextBox的值不会发生变化。
②,按下Tab键,光标移到ComboBox里,点击ComboBox的▼,TextBox的值因为触发SelectedIndexChanged事件,变成了 0
③,按下Tab键,光标移开,再次按下Tab键,光标回到ComboBox里,输入值1,TextBox的值因为触发SelectedIndexChanged事件,变成了 1
④、光标迁入ComboBox,点击▼,DropDown打开,再次点击DorpDown关闭,输入值2 ,TextBox的值因为触发SelectedIndexChanged事件,变成了 2

其他动作不写了。根据上面的一系列的光标移开,点击下拉框(▼),输入值等操作,发现了下面的规律。
Ⅰ,DropDown点开的同时会触发SelectedIndexChanged事件。
Ⅱ,DropDown点开关闭后,第一次输入肯定会触发SelectedIndexChanged事件。

单一关于上面的动作,InputMan4.0是不会触发上面的动作的,所以希望把上面的两个动作(Ⅰ、Ⅱ)都不触发。有没有什么好办法???



  1. Public Class InputMan
  2.     Friend WithEvents cmbEXPENSE_DIV As New GrapeCity.Win.Editors.GcMaskedComboBox
  3.     Dim txt As New TextBox
  4.     Private Sub InputMan_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.         Dim MaskPatternField1 As GrapeCity.Win.Editors.Fields.MaskPatternField = New GrapeCity.Win.Editors.Fields.MaskPatternField()
  6.         Me.cmbEXPENSE_DIV.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
  7.         Me.cmbEXPENSE_DIV.DropDown.AllowResize = False
  8.         Me.cmbEXPENSE_DIV.DropDown.Width = 67
  9.         MaskPatternField1.MaxLength = 1
  10.         MaskPatternField1.Pattern = "\D"
  11.         Me.cmbEXPENSE_DIV.Fields.AddRange(New GrapeCity.Win.Editors.Fields.MaskField() {MaskPatternField1})
  12.         Me.cmbEXPENSE_DIV.FlatStyle = GrapeCity.Win.Editors.FlatStyleEx.Flat
  13.         Me.cmbEXPENSE_DIV.Font = New System.Drawing.Font("MS ゴシック", 12.0!)
  14.         Me.cmbEXPENSE_DIV.HighlightText = GrapeCity.Win.Editors.HighlightText.All
  15.         Me.cmbEXPENSE_DIV.ImeMode = System.Windows.Forms.ImeMode.Disable
  16.         Me.cmbEXPENSE_DIV.ListHeaderPane.Height = 23
  17.         Me.cmbEXPENSE_DIV.ListHeaderPane.Visible = False
  18.         Me.cmbEXPENSE_DIV.Location = New System.Drawing.Point(7, 19)
  19.         Me.cmbEXPENSE_DIV.Margin = New System.Windows.Forms.Padding(4)
  20.         Me.cmbEXPENSE_DIV.Name = "cmbEXPENSE_DIV"
  21.         Me.cmbEXPENSE_DIV.PromptChar = Global.Microsoft.VisualBasic.ChrW(32)
  22.         Me.cmbEXPENSE_DIV.Size = New System.Drawing.Size(67, 22)
  23.         Me.cmbEXPENSE_DIV.TabIndex = 1

  24.         Me.Controls.Add(cmbEXPENSE_DIV)


  25.         With cmbEXPENSE_DIV
  26.             .Items.Clear()
  27.             .Items.Add("0")
  28.             .Items.Add("1")
  29.             .Items.Add("2")
  30.             .Items.Add("3")
  31.         End With

  32.         txt.Size = New System.Drawing.Size(67, 22)
  33.         txt.Location = New System.Drawing.Point(90, 19)
  34.         txt.TabIndex = 0
  35.         Me.Controls.Add(txt)
  36.     End Sub
  37.     Private Sub cmbEXPENSE_DIV_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbEXPENSE_DIV.SelectedIndexChanged
  38.         txt.Text = cmbEXPENSE_DIV.Text
  39.     End Sub
  40. End Class
复制代码

1 个回复

倒序浏览
Leo
超级版主   /  发表于:2016-1-11 12:03:00
沙发
回复 1楼sxyweiren的帖子

哎呀,这第二条怎么着看着都像是个Bug

想了半个上午了。有这么一段代码你拿去试试看。
  1. Public Class Form1
  2.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3.         Me.GcMaskedComboBox1.Items.Add("0")
  4.         Me.GcMaskedComboBox1.Items.Add("1")
  5.         Me.GcMaskedComboBox1.Items.Add("2")
  6.         Me.GcMaskedComboBox1.Items.Add("3")
  7.         Dim dropDownButton = DirectCast(Me.GcMaskedComboBox1.SideButtons(0), GrapeCity.Win.Editors.DropDownButton)
  8.         dropDownButton.IsDefaultBehavior = False
  9.         AddHandler dropDownButton.Click, AddressOf Me.OnDropDownButtonClick
  10.     End Sub
  11.     Private ignoreNextSelectedIndexChanged As Boolean
  12.     Private Sub OnDropDownButtonClick(sender As Object, e As EventArgs)
  13.         ignoreNextSelectedIndexChanged = True
  14.         Me.GcMaskedComboBox1.SwitchDropDown()
  15.         ignoreNextSelectedIndexChanged = False
  16.     End Sub
  17.     Private Sub OnSelectedIndexChanged(sender As Object, e As EventArgs) Handles GcMaskedComboBox1.SelectedIndexChanged
  18.         If ignoreNextSelectedIndexChanged Then
  19.             Return
  20.         End If
  21.         System.Diagnostics.Debug.WriteLine(String.Format("[{0}]SelectedIndexChanged!", DateTime.Now.TimeOfDay))
  22.     End Sub
  23.     Private Sub OnComboBoxKeyPress(sender As Object, e As KeyPressEventArgs) Handles GcMaskedComboBox1.KeyPress
  24.         ignoreNextSelectedIndexChanged = True
  25.     End Sub
  26.     Private Sub OnComboBoxKeyUp(sender As Object, e As KeyEventArgs) Handles GcMaskedComboBox1.KeyUp
  27.         ignoreNextSelectedIndexChanged = False
  28.     End Sub
  29.    
  30. End Class
复制代码

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部