标题:求助:C++CLR form窗体应用程序中,如何限制textBox中光标始终在字符串最后 ...
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
已结贴  问题点数:20 回复次数:9 
求助:C++CLR form窗体应用程序中,如何限制textBox中光标始终在字符串最后。
求助:C++CLR form窗体应用程序中,如何限制textBox中光标始终在字符串最后。
无论是按键盘的上、下、左、右还鼠标在字符串中点击,textBox中光标始终在字符串最后,不可以改变输入位置。。。。
搜索更多相关主题的帖子: C++ 光标 字符串 textBox 窗体 
2022-12-12 14:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:4 
你的需求怎么这么奇怪,目的是什么?
2022-12-12 14:53
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 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请确认是否正确";
        }
    }
}


Form1.rar (2.04 KB)


想加入光标位置判断,还要知道光标处字符,和光标处前一个字符。。。
思路全乱了,程序要完全重写了。

如果,可以限制光标始终在字符串最后,这个问题就不存在了。。。。
2022-12-12 15:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
光标只是输入焦点的提示符,在那里闪动就输入到那里。
不管在那个位置插入、追加、修改,不会影响最后输入的结果吧?
你要不管3721将光标钉死在尾部,意思是想只能“追加”,其他的编辑动作就不能做了。
2022-12-12 16:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
看看textbox对象有无属性SelectionStart或类似SelStart
2022-12-12 16:16
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 5楼 吹水佬
不知是不用法不正确 ,还是没有这个功能。
设置后,光标还是可以移动,可以输入。
输入完成后,光标自动回到了最后。
而不是,光标不可以移动。。。。。
2022-12-12 16:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
光标肯定会动的,除非“禁止”,“禁止”也只是看不到,并不等于他不存在。
2022-12-12 17:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
这个问题我看你就免了,光标只是一个标号,不会影响输入的东东。
2022-12-12 17:03
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
在KeyPress事件处理输入某个字符,与最后才扫描整个字串并无什么大差别。
2022-12-12 17:06
他不是恶魔
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2022-10-18
得分:1 
看看textbox对象有无属性
2022-12-12 20:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510935-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.405217 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved