Pat*_*oki 55 c# textbox keyboard-shortcuts winforms
我问这里已经问过(甚至回答过)的问题: 为什么有些文本框不接受Control +默认选择all的快捷方式
但这个答案对我不起作用.我有这个代码:
public class LoginForm : Form
{
private TextBox tbUsername;
public LoginForm()
{
tbUsername = new TextBox();
tbUsername.ShortcutsEnabled = true;
tbUsername.Multiline = false;
Controls.Add(tbUsername);
}
}
Run Code Online (Sandbox Code Playgroud)
文本框显示,我可以在上面写,我可以剪切,复制和粘贴文本,没有任何问题.但是,当我尝试按Ctrl+时,A我只会听到类似于你试图从空文本框中删除文本时所听到的"bling"(使用浏览器的地址栏尝试).
jlt*_*rem 72
像其他答案所示,Application.EnableVisualStyles()应该被称为.也TextBox.ShortcutsEnabled应该设置为true.但是如果TextBox.Multiline启用了,那么 Ctrl + A 将无效(请参阅MSDN文档).RichTextBox相反,使用将解决问题.
Sta*_*Man 37
只需为该TextBox创建一个keydown事件,并包含以下代码:
private void tbUsername_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.A)
{
if (sender != null)
((TextBox)sender).SelectAll();
}
}
Run Code Online (Sandbox Code Playgroud)
Cha*_*380 24
您始终可以覆盖进程命令键以获得所需的结果
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
var keyCode = (Keys) (msg.WParam.ToInt32() &
Convert.ToInt32(Keys.KeyCode));
if ((msg.Msg == WM_KEYDOWN && keyCode == Keys.A)
&& (ModifierKeys == Keys.Control)
&& tbUsername.Focused)
{
tbUsername.SelectAll();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Run Code Online (Sandbox Code Playgroud)
快速答案是,如果您使用多行true,则必须显式调用全选。
private void tbUsername_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A && e.Control)
{
tbUsername.SelectAll();
}
}
Run Code Online (Sandbox Code Playgroud)