gpt4 book ai didi

.net - 用户根据给定 System.Windows.Forms.KeyEventArgs 中的值键入了哪些可打印字符(如果有)?

转载 作者:行者123 更新时间:2023-12-02 00:46:52 27 4
gpt4 key购买 nike

作为解决问题的方法,我认为我必须处理 KeyDown 事件以获取用户实际键入的可打印字符。

KeyDown 为我提供了一个具有 KeyCode、KeyData、KeyValue、Modifiers、Alt、Shift、Control 属性的 KeyEventArgs 对象。

我的第一次尝试只是将 KeyCode 视为 ascii 代码,但我键盘上的 KeyCode 是 46,一个句点 ("."),所以我最终在用户键入删除键时打印了一个句点。所以,我知道我的逻辑是不充分的。

(对于那些好奇的人,问题是我在 DataGridView 的控件集合中有自己的组合框,但不知何故,我键入的某些字符不会产生 KeyPress 和 TextChanged ComboBox 事件。这些字母包括 Q、$、%。 ...

此代码将重现该问题。生成一个 Form App 并用此代码替换 ctor。运行它,并尝试在两个组合框中输入字母 Q。

public partial class Form1 : Form
{
ComboBox cmbInGrid;
ComboBox cmbNotInGrid;
DataGridView grid;

public Form1()
{
InitializeComponent();

grid = new DataGridView();

cmbInGrid = new ComboBox();
cmbNotInGrid = new ComboBox();

cmbInGrid.Items.Add("a");
cmbInGrid.Items.Add("b");
cmbNotInGrid.Items.Add("c");
cmbNotInGrid.Items.Add("d");

this.Controls.Add(cmbNotInGrid);
this.Controls.Add(grid);
grid.Location = new Point(0, 100);
this.grid.Controls.Add(cmbInGrid);
}

最佳答案

许多控件会覆盖默认的键输入事件。例如,面板默认情况下根本不会响应它们。至于简单控件的情况,你可以试试:

protected override bool IsInputKey(Keys keyData) {
// This snippet informs .Net that arrow keys should be processed in the panel (which is strangely not standard).

switch (keyData & Keys.KeyCode) {
case Keys.Left:
return true;
case Keys.Right:
return true;
case Keys.Up:
return true;
case Keys.Down:
return true;
}
return base.IsInputKey(keyData);

}

IsInputKey 函数告诉您的程序从哪些键接收事件。如果您覆盖明显具有特殊功能的键,您可能会出现奇怪的行为,但请稍微试验一下,看看哪些有效,哪些无效。

现在,对于像 DataGridView 或 ComboBox 这样的更高级的控件,按键处理可能会更加复杂。以下资源应该为您提供一些关于如何解决您的问题的指示:

http://www.dotnet247.com/247reference/msgs/29/148332.aspx

或者这个资源也许可以解决您的问题:

http://dotnetperls.com/previewkeydown

关于.net - 用户根据给定 System.Windows.Forms.KeyEventArgs 中的值键入了哪些可打印字符(如果有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/198707/

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