我在.NET Compact Framework 3.5中使用C#3.0,该程序需要能够在Windows Mobile和Windows CE设备上运行。
我创建了自己的自定义文本框控件。它不从TextBox或任何其他类型的文本框控件继承,并且这样做不是一个选项。 如何将键盘输入转换为文本,以便我可以正确地将控件的Text属性设置为用户键入的内容?就Text属性而言,它只是一个普通的字符串变量,并且不需要比TextBox.Text属性更高级。
我知道一种方法是订阅KeyDown事件并将KeyEventArgs参数手动转换为每个字符的文本。我希望有一个更好的解决方案,通过框架或操作系统为我完成键盘输入到文本的转换。 感谢。
如果我有一个不可见的TextBox并将所有键盘输入传递给它,并且每次Text更改时将我的控件Text属性设置为与TextBoxe相同,该怎么办?有没有办法做到这一点?
答案 0 :(得分:1)
将键转换为字符串(不是文本,因为文本暗示我的字体,大小,位置等等)并不过分复杂。这样的事情可能会有很长的路要走:
public class MyControl : Control
{
private int m_cursorPos = 0;
public MyControl()
{
Text = string.Empty;
CursorPos = 0;
}
private int CursorPos
{
get { return m_cursorPos; }
set
{
if(value < 0) value = 0;
if(value > Text.Length) value = Text.Length;
m_cursorPos = value;
}
}
protected override void OnKeyDown(KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Back:
if (CursorPos > 0)
{
CursorPos--;
Text = Text.Remove(CursorPos, 1);
}
break;
case Keys.Delete:
if (CursorPos < Text.Length - 1)
{
Text = Text.Remove(CursorPos, 1);
}
break;
case Keys.Left:
CursorPos--;
break;
case Keys.Right:
CursorPos++;
break;
default:
base.OnKeyDown(e);
break;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (char.IsLetterOrDigit(e.KeyChar)
|| char.IsSymbol(e.KeyChar)
|| char.IsPunctuation(e.KeyChar)
|| char.IsWhiteSpace(e.KeyChar))
{
Text = Text.Insert(CursorPos, char.ToString(e.KeyChar));
CursorPos++;
Debug.WriteLine(this.Text);
}
}
}
当然,您必须决定如何进行渲染,如果您有多线支持,则无法处理上/下键。
答案 1 :(得分:0)
我认为您正在寻找KeyConverter课程。不过,我不知道这是否是紧凑框架的一部分。