【问题标题】:Custom Textbox Zoom - Return text to active datagridview cell?自定义文本框缩放 - 将文本返回到活动的 datagridview 单元格?
【发布时间】:2016-09-21 09:24:49
【问题描述】:

我有 2 个相同形式的 Datagridview 控件。每个 Datagrid 都有一些列,用户将在其中编写长文本,因此我设计了带有 RichTextBox 的表单,当用户双击这些列以放大文本条目时会打开该表单。代码有效,但我想对两个 Datagrids 使用相同的表单,所以我应该以某种方式将文本返回到活动的 datagridview 单元格。这是我的代码(用于 Datagridview1):

TextZoomForm:

Public Class TextZoomForm

   Public OpenedForm1 As New Form1
   Private Sub RichTextBox1_DoubleClick(sender As Object, e As EventArgs) Handles RichTextBox1.DoubleClick

        OpenedForm1.DataGridView1.CurrentCell.Value = RichTextBox1.Text
        OpenedForm1.Label24.Focus()
        Me.Close()

   End Sub

   Private Sub TextZoom_Load(sender As Object, e As EventArgs) Handles Me.Load
               RichTextBox1.Text = OpenedForm1.DataGridView1.CurrentCell.Value

   End Sub

End Class

Form1 中的DataGridView1_CellMouseDoubleClick:

  Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick

        If e.ColumnIndex = 1 Then

            Dim cp = Cursor.Position
            cp.Y += CInt(Cursor.Size.Height * (-0.5))
            cp.X += CInt(Cursor.Size.Width * 0.8)

            Dim f As New TextZoomForm()
            f.OpenedForm1 = Me
            f.Show()
            f.Location = New Point(cp)

        End If

    End Sub

关于如何将文本返回到活动 datagridview 单元格的任何想法?

【问题讨论】:

    标签: vb.net datagridview


    【解决方案1】:

    更改您的缩放表单,使其不知道其数据来自何处。相反,使用它的控件将传递数据。

    Public Class TextZoomForm
    
        Public Property ZoomedText As String
            Get
                Return RichTextBox1.Text
            End Get
            Set(value As String)
                RichTextBox1.Text = value
            End Set
        End Property
    
        Private Sub RichTextBox1_DoubleClick(sender As Object, e As EventArgs) Handles RichTextBox1.DoubleClick
            Me.Close()
        End Sub
    
    End Class
    

    要调用表单,请将您的代码更改为以下内容:

    Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    
    ...
    
                Dim f As New TextZoomForm()
                f.ZoomedText = DataGridView1.CurrentCell.Value
                f.ShowDialog()
                'Great breakpoint location.
                DataGridView1.CurrentCell.Value = f.ZoomedText
                Label24.Focus()
    ....
    
        End Sub
    

    使用ShowDialog 可防止用户在通话过程中更改当前单元格。

    如果你需要它是无模式的,那么你应该:

    • 存储用户选择的单元格
    • 处理FormClosing 事件。
    • 测试DialogResult 以确保用户按下确定
    • 将数据写回存储的单元格。

    【讨论】:

    • 我应该如何使用您的属性来双击 ZoomText?我粘贴了您的代码,但它没有向 Datagridview 单元格返回任何内容。
    • 我已经更新了答案,表明您只需双击关闭表单。数据回到ShowDialog()之后的行中的单元格
    • 是的,现在可以了,但仍然存在问题。将文本插入 Datagrid 后,我将焦点放在其他一些控件上,以便立即查看输入的文本。为此,我使用 Label24,请参阅我编辑的问题(RichTextbox double_click)。现在这也不起作用....
    • 我已编辑答案以转移焦点。 ShowDialog 之后是一个很好的断点点,可以查看正在发生的事情并确保它是您需要的
    • 谢谢,现在一切正常。看来我将来必须学习很多有关使用属性的知识。非常感谢!!
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多