C# 热键框(AHK 热键样式)
C# Hotkey Box (AHK Hotkey Style)
我正在尝试在 C# 中创建与 AHK 中类似的热键功能。就像在任何视频游戏中一样,您单击一个框,按下热键并注册它。
这就是我要对文本框执行的操作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Keybinder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
KeyPreview = true;
textBox1.ReadOnly = true;
textBox1.Focus();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "HELLO";
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char key = e.KeyChar;
string keystring = Char.ToString(key);
textBox1.Text = keystring;
}
}
}
但是,问题是,我需要关闭textBox的基本功能,但我不知道如何。例如:光标仍然处于活动状态,我可以突出显示其中的文本。
如果不需要它的功能,为什么要使用 TextBox?
您可以创建一个简单的自定义控件并将其放在您的窗体上,而不是关闭它的功能。类似于:
public class KeyInput : UserControl
{
public string KeyString { get; set; } = "HELLO";
public KeyInput() : base()
{
BorderStyle = BorderStyle.Fixed3D;
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
KeyString = e.KeyChar.ToString();
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawString(KeyString, Font, SystemBrushes.ControlText, 0, 0);
}
}
你可以把文本框的属性Enabled设置为false,然后把背景色设置为白色,字体设置为黑色,这样看起来不像是禁用了,但是你不能关注或点击 ir.
textBox1.Enabled = false;
顺便说一句,我有一个非常简单的库,可能会有用。
https://github.com/PabloHorno/HotKeyDialog
一旦你引用了库,你就可以像这样使用它
或者更简单的方式
var hotKey = new HotKey();
hotKey = HotKeyMessageBox.Show("Title", "A little description");
hotKey.ToString();
或者你可以检查用户是否关闭了框
HotKey hotkey = new HotKey();
if (HotKeyMessageBox.Show("Title", "Please press the key combination", out hotkey) == DialogResult.OK)
label.Text = "You have pressed the keys: " + hotkey.ToString();
else
label.Text = "You have closed the dialog. There is no input";
希望对您有所帮助!
我正在尝试在 C# 中创建与 AHK 中类似的热键功能。就像在任何视频游戏中一样,您单击一个框,按下热键并注册它。 这就是我要对文本框执行的操作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Keybinder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
KeyPreview = true;
textBox1.ReadOnly = true;
textBox1.Focus();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "HELLO";
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char key = e.KeyChar;
string keystring = Char.ToString(key);
textBox1.Text = keystring;
}
}
}
但是,问题是,我需要关闭textBox的基本功能,但我不知道如何。例如:光标仍然处于活动状态,我可以突出显示其中的文本。
如果不需要它的功能,为什么要使用 TextBox?
您可以创建一个简单的自定义控件并将其放在您的窗体上,而不是关闭它的功能。类似于:
public class KeyInput : UserControl
{
public string KeyString { get; set; } = "HELLO";
public KeyInput() : base()
{
BorderStyle = BorderStyle.Fixed3D;
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
KeyString = e.KeyChar.ToString();
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawString(KeyString, Font, SystemBrushes.ControlText, 0, 0);
}
}
你可以把文本框的属性Enabled设置为false,然后把背景色设置为白色,字体设置为黑色,这样看起来不像是禁用了,但是你不能关注或点击 ir.
textBox1.Enabled = false;
顺便说一句,我有一个非常简单的库,可能会有用。
https://github.com/PabloHorno/HotKeyDialog
一旦你引用了库,你就可以像这样使用它 或者更简单的方式
var hotKey = new HotKey();
hotKey = HotKeyMessageBox.Show("Title", "A little description");
hotKey.ToString();
或者你可以检查用户是否关闭了框
HotKey hotkey = new HotKey();
if (HotKeyMessageBox.Show("Title", "Please press the key combination", out hotkey) == DialogResult.OK)
label.Text = "You have pressed the keys: " + hotkey.ToString();
else
label.Text = "You have closed the dialog. There is no input";
希望对您有所帮助!