编程论坛
注册
登录
编程论坛
→
C语言论坛
求助:C++CLR form窗体应用程序中,如何限制textBox中光标始终在字符串最后。
追梦人zmrghy
发布于 2022-12-12 14:41, 1323 次点击
求助:C++CLR form窗体应用程序中,如何限制textBox中光标始终在字符串最后。
无论是按键盘的上、下、左、右还鼠标在字符串中点击,textBox中光标始终在字符串最后,不可以改变输入位置。。。。
9 回复
#2
rjsp
2022-12-12 14:53
你的需求怎么这么奇怪,目的是什么?
#3
追梦人zmrghy
2022-12-12 15:26
回复 2楼 rjsp
限制,textBox只能输入符合“路径格式”字符串。。。
以为成功了,测试中发现,如果改变光标位置,不是在字符串最后,程序就会出错。
只有本站会员才能查看附件,请
登录
程序代码:
private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
textBox2->Clear();
if (e->KeyChar == 8) //退格键,不受限制。
return;
//if (e->KeyChar == '\\' || e->KeyChar == '/' || e->KeyChar == ':' || e->KeyChar == '*' || e->KeyChar == '?' || e->KeyChar == '"' || e->KeyChar == '<' || e->KeyChar == '>' || e->KeyChar == '|')
//{
//
// textBox2->Text = "路径名不能包括下列任何字符\r\n\\ / : * ? \" < > |";
//}
if (textBox1->Text == "") //第-次输入硬盘分区,确认硬盘分区存在后,方可输入。。。。。
{
if (e->KeyChar >= 'C' && e->KeyChar <= 'Z' || e->KeyChar >= 'c' && e->KeyChar <= 'z')
{
char _disk_char[4] = {0,':','\\',0};
_disk_char[0] = e->KeyChar >= 'C' && e->KeyChar <= 'Z' ? e->KeyChar :e->KeyChar - 32;
String^ _disk = gcnew String(_disk_char);
if (Directory::Exists(_disk))
textBox1->Text = _disk;
}
e->Handled = true;
textBox1->Select(textBox1->Text->Length, 0);
}
else
{
if (e->KeyChar == ':' && textBox1->Text->Length != 1)
e->Handled = true;
else if (textBox1->Text->Length == 2 && e->KeyChar != '\\')
e->Handled = true;
else if (e->KeyChar == '\\' && textBox1->Text->EndsWith("\\"))
e->Handled = true;
else if (e->KeyChar == '/'|| e->KeyChar == '*' || e->KeyChar == '?' || e->KeyChar == '"' || e->KeyChar == '<' || e->KeyChar == '>' || e->KeyChar == '|')
e->Handled = true;
}
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
textBox2->Clear();
if (textBox1->Text == "")
{
textBox2->Text = "没有输入任何路径";
}
else
{
String^ path_name = nullptr;
try
{
if (!Directory::Exists(textBox1->Text))
{
textBox2->Text = "开始创建 \"" + textBox1->Text + "\" 目录";
DirectoryInfo^ credir = Directory::CreateDirectory(textBox1->Text);
path_name = credir->FullName;
}
else
{
textBox2->Text = textBox1->Text + "目录已经存在";
}
}
catch (Exception^ e)
{
textBox2->Text +="\r\n目录创建失败\r\n"+ e->Message;
}
finally
{
if(path_name!=nullptr)
textBox2->Text += "\r\n创建目录 \"" + path_name + "\"\r\n请确认是否正确";
}
}
}
只有本站会员才能查看附件,请
登录
想加入光标位置判断,还要知道光标处字符,和光标处前一个字符。。。
思路全乱了,程序要完全重写了。
如果,可以限制光标始终在字符串最后,这个问题就不存在了。。。。
#4
吹水佬
2022-12-12 16:08
光标只是输入焦点的提示符,在那里闪动就输入到那里。
不管在那个位置插入、追加、修改,不会影响最后输入的结果吧?
你要不管3721将光标钉死在尾部,意思是想只能“追加”,其他的编辑动作就不能做了。
#5
吹水佬
2022-12-12 16:16
看看textbox对象有无属性SelectionStart或类似SelStart
#6
追梦人zmrghy
2022-12-12 16:56
回复 5楼 吹水佬
不知是不用法不正确 ,还是没有这个功能。
设置后,光标还是可以移动,可以输入。
输入完成后,光标自动回到了最后。
而不是,光标不可以移动。。。。。
#7
吹水佬
2022-12-12 17:01
光标肯定会动的,除非“禁止”,“禁止”也只是看不到,并不等于他不存在。
#8
吹水佬
2022-12-12 17:03
这个问题我看你就免了,光标只是一个标号,不会影响输入的东东。
#9
吹水佬
2022-12-12 17:06
在KeyPress事件处理输入某个字符,与最后才扫描整个字串并无什么大差别。
#10
他不是恶魔
2022-12-12 20:28
看看textbox对象有无属性
1