none
VB2005中的死循环的问题 RRS feed

  • 问题

  •  

    语句:


        Private Sub UltraGrid1_AfterCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.CellEventArgs) Handles UltraGrid1.AfterCellUpdate
            Try

                If Me.UltraGrid1.ActiveRow.Cells("jf").Value <> "" Then’‘’当当前行jf单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("df").Value = ""       ’‘’则当前行的df单元格的值等于空
                    Exit Sub
                End If

                If Me.UltraGrid1.ActiveRow.Cells("df").Value <> "" Then’‘’当当前行df单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("jf").Value = ""         ’‘’则当前行jf单元格的值等于空

                End If
                Exit Sub
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Information, "try")
            End Try
        End Sub

     

     

    红色位置为死循环出错的地方

    浅蓝色为注释

     

     

    请feiyun0112帮我看看..该怎么改????谢谢

    2008年10月29日 14:10

答案

全部回复

  •   Me.UltraGrid1.ActiveRow.Cells("df").Value = "" 

    也会触发AfterCellUpdate事件,你应该在前面加判断是哪个cell引起的

    2008年10月30日 1:05
    版主
  • 1.请feiyun0112老师帮我转换一下这段代码:(转换成vb语法)

     

     if (this.ultraGrid1.Rows.Count <= 0)
                     {
                         MessageInfo.ShowMessage("m_system_client_0009");
                         return ;
                     }
                     #endregion
                     if (this.ultraGrid1.ActiveRow != null)
                     {
                         this.ultraGrid1.ActiveRow.Selected = true;
                     }
                     if (MessageInfo.ShowMessage("m_system_client_0003", MessageBoxButtons.YesNo) == DialogResult.Yes)
                     {
                         bool blnDeleted = false;
                         for (int i = 0; i < this.ultraGrid1.Rows.Count; i++)
                         {
                             if (this.ultraGrid1.RowsIdea.Selected || this.ultraGrid1.RowsIdea.IsActiveRow)
                             {
                                 if (this.ultraGrid1.RowsIdea.Delete(false))
                                 {
                                     i--;
                                 }
                                 blnDeleted = true;
                             }
                         }
                     
                         if (!blnDeleted)
                         {
                             MessageInfo.ShowMessage("m_system_client_0009");
                         }
                     }

     

    2.我加进以后成这样的代码,但进入断点事件后不经过FOR 这个语句里来

      Private Sub UltraGrid1_AfterCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.CellEventArgs) Handles UltraGrid1.AfterCellUpdate

            Try
                Dim i As Integer
                Dim j As Integer

                If Me.UltraGrid1.Rows(i).Cells("jf").Value = "" Then
                    For i = 1 To (Me.UltraGrid1.Rows.Count - 1)

                        Me.UltraGrid1.Rows(i).Cells("df").Value = ""
                    Next
                End If

                If Me.UltraGrid1.Rows(i).Cells("df").Value = "" Then
                    For j = 1 To (Me.UltraGrid1.Rows.Count - 1)
                        Me.UltraGrid1.Rows(j).Cells("jf").Value = ""
                    Next
                End If


                Exit Sub
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Information, "try")
            End Try

     

    红色的部分,断点不经过,而且我的借方金额和贷方金额里都有了数据,请帮我看看该怎么写?这几天脑袋都大了

     

    谢谢!

    2008年10月30日 8:32
  •  rego 写:

     

    语句:


        Private Sub UltraGrid1_AfterCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.CellEventArgs) Handles UltraGrid1.AfterCellUpdate
            Try

                If Me.UltraGrid1.ActiveRow.Cells("jf").Value <> "" Then’‘’当当前行jf单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("df").Value = ""       ’‘’则当前行的df单元格的值等于空
                    Exit Sub
                End If

                If Me.UltraGrid1.ActiveRow.Cells("df").Value <> "" Then’‘’当当前行df单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("jf").Value = ""         ’‘’则当前行jf单元格的值等于空

                End If
                Exit Sub
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Information, "try")
            End Try
        End Sub

     

     

    红色位置为死循环出错的地方

    浅蓝色为注释

     

     

    你说要加个判断,我试了很多方法都不行,我就加了个for next,我自己都不知道我在写什么?

    但我的意图是清楚的,即:上面注释

     

    i 为行数吧

     

    feiyun0112老师您就把正确代码告诉我吧.............这个问题我都想了很多天了..一直没明白该怎么写?

     

    2008年10月30日 9:48
  • 修改之前先记住当前的cellindex,我不知道有没有activecell属性

    Code Snippet

     

     

      Private Sub UltraGrid1_AfterCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.CellEventArgs) Handles UltraGrid1.AfterCellUpdate

    if cellindex=Me.UltraGrid1.ActiveRow.Cells("jf").index then
            Try

                If Me.UltraGrid1.ActiveRow.Cells("jf").Value <> "" Then’‘’当当前行jf单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("df").Value = ""       ’‘’则当前行的df单元格的值等于空
                    Exit Sub
                End If

                If Me.UltraGrid1.ActiveRow.Cells("df").Value <> "" Then’‘’当当前行df单元格的值不等于空的时候
                    Me.UltraGrid1.ActiveRow.Cells("jf").Value = ""         ’‘’则当前行jf单元格的值等于空

                End If
                Exit Sub
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Information, "try")
            End Try

    end if
        End Sub

     

     

    2008年10月30日 10:18
    版主
  •  

    有这个属性

    dim cellindex as ingeter

    if cellindex=me.ultragrid1.activecell.value then

        if not ultragrid1.activecell.value is nothing then

               me.ultragrid1.activerow.cell("df").value=""

    end if

     

    是这样写吗?

    设置断点以后从:

    if cellindex=me.ultragrid1.activecell.value then

    就直接跳到:

    结尾的

    end if

    2008年10月30日 10:49
  • Code Snippet

    if ultragrid1.activerow.cell("jf").index=me.ultragrid1.activecell.value then//是jf列触发的

               me.ultragrid1.activerow.cell("df").value=""

    end if

     

     

    2008年10月30日 10:53
    版主
  •  feiyun0112 写:

    Code Snippet

    if ultragrid1.activerow.cell("jf").index=me.ultragrid1.activecell.value then//是jf列触发的

               me.ultragrid1.activerow.cell("df").value=""

    end if

     

     

    没有index这个属性啊

    2008年10月30日 11:50
  • 我只是举隔例子

     

    主要就是判断当前cellindex是不是"jf"列的index,是就表示是jf列触发的

    2008年10月31日 0:57
    版主
  •  feiyun0112 写:

    我只是举隔例子

     

    主要就是判断当前cellindex是不是"jf"列的index,是就表示是jf列触发的

     

     

    这样写也不对啊

    dim cellindex as integer

     

    if cellindex=me.ultragrid1.activecell.value then

    if not  ultragrid1.activerow.cell("jf").value is nothing then

    me.ultragrid1.activerow.cell("df").value=""

    end if

    if not  ultragrid1.activerow.cell("df").value is nothing then

    me.ultragrid1.activerow.cell("jf").value=""

    end if

    end if
    2008年10月31日 4:04
  • 晕,你看懂我的意思没

     

    是把

    ultragrid1.activerow.cell("jf")的列index

    ultragrid1.activecell的列index

    去比较

     

    如果相同,就表示正在改“jf”列,这时候才处理

    ultragrid1.activerow.cell("df").value

     

    反之一样

     

     

    2008年10月31日 4:21
    版主
  •  feiyun0112 写:

    晕,你看懂我的意思没

     

    是把

    ultragrid1.activerow.cell("jf")的列index

    ultragrid1.activecell的列index

    去比较

     

    如果相同,就表示正在改“jf”列,这时候才处理

    ultragrid1.activerow.cell("df").value

     

    反之一样

     

     

     

    是把

    ultragrid1.activerow.cell("jf")的列index

    ultragrid1.activecell的列index

    去比较

     

     

    没有index这个属性啊,换成value行不行?

     

    2008年10月31日 4:51
  • value肯定不行

     

    一定有属性可以得到的columnindex,cellindex,你看看帮助

    2008年10月31日 5:00
    版主
  •  feiyun0112 写:

    value肯定不行

     

    一定有属性可以得到的columnindex,cellindex,你看看帮助

     

     Dim cellindex As Integer

                cellindex = Me.UltraGrid1.ActiveCell.Column.Index
                If cellindex = Me.UltraGrid1.ActiveRow.Cells("jf").Column.Index Then
                    Me.UltraGrid1.ActiveRow.Cells("df").Value = ""
                End If
                If cellindex = Me.UltraGrid1.ActiveRow.Cells("df").Column.Index Then
                    Me.UltraGrid1.ActiveRow.Cells("jf").Value = ""
                End If
              

    有这样的属性

     

    这样写可以吗?

    2008年10月31日 5:15
  • 因该,你试试

    2008年10月31日 5:20
    版主
  •  

     

    非常感谢feiyun0112老师的耐心答复,,按照你的方法,OK了

    再次感谢!!!!!!!

    2008年10月31日 5:35