gpt4 book ai didi

C# TextBox NewLine 在 KeyDownEvent 上模拟 Ctrl+Enter

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:21 25 4
gpt4 key购买 nike

我有一个 TextBox(多行),如果我按 Ctrl+Enter,它只会换行。但我也想在 Shift+Enter 上执行此操作。我试过:

messageTextBox_KeyDown(null, new KeyEventArgs(Keys.Control | Keys.Enter));

但这行不通。

我认为我可以做到:

int lastSelectionStart = messageTextBox.SelectionStart;
messageTextBox.Text = messageTextBox.Text.Insert(messageTextBox.SelectionStart, Environment.NewLine);
messageTextBox.SelectionStart = lastSelectionStart;

但我不喜欢这样。

我怎样才能使 Shift+Enter 与 Ctrl+Enter 相同?

我当前的代码:

按键按下事件

if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
if (e.Shift)
{

}
else if (!e.Control)
{
sendButton_Click(null, null);
}
}

在按键事件中:

if (e.KeyChar == (char)13)
{
e.Handled = true;
return;
}

这是因为我想单独使用 Enter 键作为发送按钮。

最佳答案

在我看来,您遇到的真正问题是表单的 AcceptButton 属性。您无法使用 KeyDown 事件处理程序解决此问题,击键在到达事件之前被处理。

这可以通过覆盖表单的 ProcessCmdKey() 方法来解决,但最干净的方法是创建您自己的 TextBox 派生控件。您可以覆盖它的 IsInputKey() 方法来告诉 Winforms 您想要查看 Ctrl+Enter 键。向您的项目添加一个新类并粘贴如下所示的代码。编译。从工具箱顶部放下新控件。请注意如何根据您的方便更改类,使其更适合作为聊天输入框。

使用系统;使用 System.Windows.Forms;

class ChatBox : TextBox {
public ChatBox() {
this.Multiline = true;
}
protected override bool IsInputKey(Keys keyData) {
if (keyData == (Keys.Shift | Keys.Enter)) return true;
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyData == (Keys.Shift | Keys.Enter)) {
int pos = this.SelectionStart;
this.SelectedText = Environment.NewLine;
this.SelectionStart = pos;
e.Handled = e.SuppressKeyPress = true;
return;
}
base.OnKeyDown(e);
}
}

关于C# TextBox NewLine 在 KeyDownEvent 上模拟 Ctrl+Enter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com