对于一个文本框,如何使按下“Alt+Enter”组合键和按下回车键同样效果??

时间:2022-09-12 16:56:34
在vb.net里,对于文本框,“Alt+Enter”两个键按下没有任何效果,能不能让它的效果和按下回车键相同的效果,也会在文本框里进行换行?? 
我尝试过的方法:
1. 在KeyDown事件中,KeyEventArgs参数的Alt属性可以知道是否按下了Alt键,但是这个键是只读的,不能进行修改,所以(e.Alt = False)这样设置不可以。
2. 在KeyDown事件中判断,如果按下“Alt+Enter”两个键,那么用代码控制文本框中的文本换行,例如:(TextBox1.Text &= vbCrlf),但是因为文本框中的光标所在位置不一定是在所有文本内容的最后位置,前面的代码只是在最后位置加一个换行符,显然不能符合要求。或许有方法在光标的位置加一个回车符??
3. 在KeyDown事件中,如果按下“Alt+Enter”两个键,那么不对这个按下进行处理(e.Handled = True),再发送一个回车的KeyDown消息到文本框,例如(PostMessage(TextBox2.Handle.ToInt32, WM_KEYDOWN, 13, &H1C0001)),但是这个消息会再次进入KeyDown事件,而且e.Alt属性仍然是True,这样又会进入发送消息的部分,从而形成一个死循环。
4. 从TextBox派生一个新的类,截获KeyDown消息,来进行一些更改。如下所示:
Public Class TextBoxEx
    Inherits System.Windows.Forms.TextBox
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
....
但是,按下Alt键加其它的键,这样的组合键,并不触发KeyDown消息。

也许我上面所想过的方法有什么不对的地方,或者有什么其它的方法,哪位可以帮帮忙,告诉我一下,在这里先多谢了。

9 个解决方案

#1


Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.Alt And e.KeyCode = Keys.Enter Then
            TextBox1.Text = TextBox1.Text & Chr(13)
        End If
    End Sub

#2


首先你要把texbox的multiple属性设为true

#3


兄弟说的是TextBox的“Multiline”属性吧。
而且我上面所说的第2种方法也说过了,你所说的只是在文本内容的最后加了一个换行符,并不能在输入光标所在的位置加入一个换行符,所以这样不能符合我所要的要求。
谢谢,还有其它方法么??

#4


qlming (心语) 中提到的按Enter键是回车的意思,还是回车换行的意思,如果是回车换行应该加vbCrlf

If e.Alt And e.KeyCode = Keys.Enter Then
    TextBox1.Text = TextBox1.Text & vbCrLf
    '将光标设到最后
    'TextBox1.SelectionStart = TextBox1.Text.Length
End If

#5


对,我说的Enter键是回车换行的意思。
我要实现的是按下“Alt+Enter”两个键时,在光标的位置进行回车换行,而“lljlll2009(第二次爱上你)”所说的内容,是把文本内容在最后面加一个回车换行后,再把光标移动到最后,这个还是不能实现我要的那样。
不过,还是谢谢你的回复。
哪位再帮帮忙???

#6


vbCrlf 回车换行

想要在光标位置换行,就自己组合就行了,TextBox提供了这些属性的

#7


把里面的代码改成:
 TextBox1.Text = TextBox1.Text.Insert(TextBox1.SelectionStart, vbCrLf)

#8


楼上的还要加个退格符吧 vbBack
不然 按回车总是要换行的
LZ的意思是只换光标,不加行

#9


嗯,大概差不多了。“lljlll2009(第二次爱上你)”所写的INSERT方法好像可以。稍微改一下,如下所示,好像差不多。

    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.Alt = True And e.KeyCode = Keys.Enter Then
            Dim intPos As Integer = TextBox1.SelectionStart
            TextBox1.Text = TextBox1.Text.Insert(intPos, vbCrLf)
            TextBox1.SelectionStart = intPos + 2
        End If
    End Sub

先结贴吧,有什么问题,再来麻烦大家。
谢谢各位帮忙!!!

#1


Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.Alt And e.KeyCode = Keys.Enter Then
            TextBox1.Text = TextBox1.Text & Chr(13)
        End If
    End Sub

#2


首先你要把texbox的multiple属性设为true

#3


兄弟说的是TextBox的“Multiline”属性吧。
而且我上面所说的第2种方法也说过了,你所说的只是在文本内容的最后加了一个换行符,并不能在输入光标所在的位置加入一个换行符,所以这样不能符合我所要的要求。
谢谢,还有其它方法么??

#4


qlming (心语) 中提到的按Enter键是回车的意思,还是回车换行的意思,如果是回车换行应该加vbCrlf

If e.Alt And e.KeyCode = Keys.Enter Then
    TextBox1.Text = TextBox1.Text & vbCrLf
    '将光标设到最后
    'TextBox1.SelectionStart = TextBox1.Text.Length
End If

#5


对,我说的Enter键是回车换行的意思。
我要实现的是按下“Alt+Enter”两个键时,在光标的位置进行回车换行,而“lljlll2009(第二次爱上你)”所说的内容,是把文本内容在最后面加一个回车换行后,再把光标移动到最后,这个还是不能实现我要的那样。
不过,还是谢谢你的回复。
哪位再帮帮忙???

#6


vbCrlf 回车换行

想要在光标位置换行,就自己组合就行了,TextBox提供了这些属性的

#7


把里面的代码改成:
 TextBox1.Text = TextBox1.Text.Insert(TextBox1.SelectionStart, vbCrLf)

#8


楼上的还要加个退格符吧 vbBack
不然 按回车总是要换行的
LZ的意思是只换光标,不加行

#9


嗯,大概差不多了。“lljlll2009(第二次爱上你)”所写的INSERT方法好像可以。稍微改一下,如下所示,好像差不多。

    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.Alt = True And e.KeyCode = Keys.Enter Then
            Dim intPos As Integer = TextBox1.SelectionStart
            TextBox1.Text = TextBox1.Text.Insert(intPos, vbCrLf)
            TextBox1.SelectionStart = intPos + 2
        End If
    End Sub

先结贴吧,有什么问题,再来麻烦大家。
谢谢各位帮忙!!!