Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 自定义文本框缩放-将文本返回到活动datagridview单元格?_Vb.net_Datagridview - Fatal编程技术网

Vb.net 自定义文本框缩放-将文本返回到活动datagridview单元格?

Vb.net 自定义文本框缩放-将文本返回到活动datagridview单元格?,vb.net,datagridview,Vb.net,Datagridview,我有两个相同形式的Datagridview控件。每个Datagrid都有一些列,用户可以在其中写入长文本,所以我设计了一个带有RichTextBox的表单,当用户双击这些列以放大文本输入时,该表单就会打开。代码可以工作,但我想对两个Datagrids使用相同的表单,所以我应该以某种方式将文本返回到活动datagridview单元格。以下是我的代码(适用于Datagridview1): 文本ZoomForm: Public Class TextZoomForm Public OpenedF

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

文本ZoomForm:

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
DataGridView1\u单元格鼠标双击表单1:

  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单元格的想法?

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

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
    事件
  • 测试
    对话框result
    以确保用户按了ok
  • 将数据写回存储单元

我应该如何使用您的属性双击ZoomText?我粘贴了您的代码,但它不会向Datagridview单元格返回任何内容。我已按答案进行了更新,显示您只需双击即可关闭表单。数据在
ShowDialog()之后返回到行中的单元格。
yes现在可以工作了,但仍然存在一个问题。在将文本插入Datagrid之后,我将焦点设置在其他一些控件上,以便立即查看输入的文本。为此,我使用Label24,请参见我编辑的问题(RichTextbox双击)。现在这也不行了……我编辑了答案以转移焦点。就在ShowDialog之后,它是一个很好的断点点,可以查看正在发生的事情,并确保它是您所需要的。谢谢,现在一切都正常了。看来我将来要学习很多关于使用属性的知识。非常感谢!!