如何在 windows 应用程序中制作键盘
how to make keyboard in windows application
我需要在 windows 我正在使用的表单应用程序中使用键盘功能
private void btnW_Click(object sender, EventArgs e)
{
txtCategory.Text += btnW.Text;
}
但我需要它用于多个 textbox
就像如果专注于 textbox1
它会在 textbox1
中添加 text
如果 TextBox2
专注于键盘 button
只会影响 TextBox2
。
像真正的键盘功能
在 .Net 3.5 版本中
在屏幕截图中看到
首先找到焦点文本框,然后在该框中设置文本:
private void btnW_Click(object sender, EventArgs e)
{
Func<Control, TextBox> FindFocusedTextBox(Control control)
{
var container = this as IContainerControl;
while (container != null)
{
control = container.ActiveControl;
container = control as IContainerControl;
}
return control as TextBox;
}
var focussedTextBox = FindFocusedTextBox(this);
if(focussedTextBox != null)
focussedTextBox.Text += btnW.Text;
}
脚注:寻找焦点来源于:What is the preferred way to find focused control in WinForms app?
我想向您推荐一个选项。希望对您有所帮助
在页面中声明一个全局TextBoxObject,并将当前获得焦点的文本框分配给该对象。将有一个事件处理程序让它成为所有按钮的 btnW_Click
。然后您可以将文本添加到焦点文本框。请参阅此代码:
TextBox TextBoxObject; // this will be global
// Event handler for all button
private void btnW_Click(object sender, EventArgs e)
{
if(TextBoxObject!=null)
{
TextBoxObject.Text += btnW.Text; // This will add the character at the end of the current text
// if you want to Add at the current position means use like this
int currentIndex = TextBoxObject.SelectionStart;
TextBoxObject.Text = TextBoxObject.Text.Insert(currentIndex, btnW.Text);
}
}
您必须使用以下代码将焦点分配给文本框:
private void textBox2_Click(object sender, EventArgs e)
{
TextBoxObject = textBox1;
}
试试这个:
object obj;
private void btnW_Click(object sender, EventArgs e)
{
if (obj != null)
{
(obj as TextBox).Text += btnW.Text;
}
}
private void txtCategory_Click(object sender, EventArgs e)
{
obj = txtCategory;
}
private void textBox1_Click(object sender, EventArgs e)
{
obj = textBox1;
}
试试这个:
对你有帮助。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Whosebug
{
public partial class Form2 : Form
{
TextBox txtName;
public Form2()
{
InitializeComponent();
}
private void textBox1_Click(object sender, EventArgs e)
{
txtName = textBox1;
}
private void button1_Click(object sender, EventArgs e)
{
if (txtName != null)
{
txtName.Text += button1.Text;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (txtName != null)
{
txtName.Text += button2.Text;
}
}
private void textBox2_Click(object sender, EventArgs e)
{
txtName = textBox2;
}
}
}
我需要在 windows 我正在使用的表单应用程序中使用键盘功能
private void btnW_Click(object sender, EventArgs e)
{
txtCategory.Text += btnW.Text;
}
但我需要它用于多个 textbox
就像如果专注于 textbox1
它会在 textbox1
中添加 text
如果 TextBox2
专注于键盘 button
只会影响 TextBox2
。
像真正的键盘功能 在 .Net 3.5 版本中
在屏幕截图中看到
首先找到焦点文本框,然后在该框中设置文本:
private void btnW_Click(object sender, EventArgs e)
{
Func<Control, TextBox> FindFocusedTextBox(Control control)
{
var container = this as IContainerControl;
while (container != null)
{
control = container.ActiveControl;
container = control as IContainerControl;
}
return control as TextBox;
}
var focussedTextBox = FindFocusedTextBox(this);
if(focussedTextBox != null)
focussedTextBox.Text += btnW.Text;
}
脚注:寻找焦点来源于:What is the preferred way to find focused control in WinForms app?
我想向您推荐一个选项。希望对您有所帮助
在页面中声明一个全局TextBoxObject,并将当前获得焦点的文本框分配给该对象。将有一个事件处理程序让它成为所有按钮的 btnW_Click
。然后您可以将文本添加到焦点文本框。请参阅此代码:
TextBox TextBoxObject; // this will be global
// Event handler for all button
private void btnW_Click(object sender, EventArgs e)
{
if(TextBoxObject!=null)
{
TextBoxObject.Text += btnW.Text; // This will add the character at the end of the current text
// if you want to Add at the current position means use like this
int currentIndex = TextBoxObject.SelectionStart;
TextBoxObject.Text = TextBoxObject.Text.Insert(currentIndex, btnW.Text);
}
}
您必须使用以下代码将焦点分配给文本框:
private void textBox2_Click(object sender, EventArgs e)
{
TextBoxObject = textBox1;
}
试试这个:
object obj;
private void btnW_Click(object sender, EventArgs e)
{
if (obj != null)
{
(obj as TextBox).Text += btnW.Text;
}
}
private void txtCategory_Click(object sender, EventArgs e)
{
obj = txtCategory;
}
private void textBox1_Click(object sender, EventArgs e)
{
obj = textBox1;
}
试试这个:
对你有帮助。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Whosebug
{
public partial class Form2 : Form
{
TextBox txtName;
public Form2()
{
InitializeComponent();
}
private void textBox1_Click(object sender, EventArgs e)
{
txtName = textBox1;
}
private void button1_Click(object sender, EventArgs e)
{
if (txtName != null)
{
txtName.Text += button1.Text;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (txtName != null)
{
txtName.Text += button2.Text;
}
}
private void textBox2_Click(object sender, EventArgs e)
{
txtName = textBox2;
}
}
}