6

我有一个Textbox带面具的货币。掩码显示textbox--------.--

所以用户在掩码上输入数字。

现在客户说他不想从左到右输入字母。他想从右到左打字。

类似于我们在计算器中的内容。

现在我尝试更改textbox'righttoleft属性,但这对我的事业没有帮助。

最后,我坚持处理关键事件以手动更改位置。我能够改变位置,但在完成逻辑时卡住了。

这是我的代码的样子:

 void Textbx_KeyDown(object sender, KeyEventArgs e)
    {


        String temp = T.Text;
        string temp2 = T.Text;

        int CursorIndex = T.SelectionStart - 1;

        for (int i = 0; i <= CursorIndex; i++)
        {
            if (i == 7)
            {

                temp2 = temp2.Insert(i, temp[i + 2].ToString());
                temp2 = temp2.Remove(i, 2);

                //i = i + 2;
            }
            else if (CursorIndex == i)
            {
                temp2 = temp2.Remove(i, 1);
                temp2 = temp2.Insert(i, temp[i + 1].ToString());
            }

            else
            {
                //   T.Text = T.Text.Insert(i + 1, "_");

                temp2 = temp2.Insert(i, temp[i + 1].ToString());
                temp2 = temp2.Remove(i + 1, 1);

            }

        }
        T.Text = temp2;
        // T.Text = T.Text.Insert(CursorIndex-1, temp[CursorIndex].ToString());
        if (CursorIndex != -1)
            T.SelectionStart = CursorIndex - 1;


    }

有一个更好的方法吗?如果不是,我应该如何完成逻辑?

4

3 回答 3

4

文本框中有一个属性:

T.RightToLeft = RightToLeft.Yes
于 2013-07-04T05:05:00.357 回答
2

我已经为您编写了此代码;请尝试一下:

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string mychar = "000000";
        string mtxt;
        int mypos = 6;
        public Form1()
        {
            InitializeComponent();
        }

    private void Form1_Load(object sender, EventArgs e)
    {
        maskedTextBox1.Text = mychar;
    }

    private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            mtxt = mtxt + e.KeyChar;
            mypos--;
            mychar = mychar.Remove(mypos, mtxt.Length);
            mychar = mychar.Insert(mypos, mtxt);
            maskedTextBox1.Text = mychar;
        }
    }
}
于 2013-07-04T07:30:47.860 回答
0

尝试使用 maskedTextBox。

设置 TextMaskFormat 属性 = IncludePrompt

    private void maskedTextBox1_Click(object sender, EventArgs e)
    {
        maskedTextBox1.SelectionStart = maskedTextBox1.Mask.Length + 1;
    }

    private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar != (char) Keys.Back)
        {
            String a = maskedTextBox1.Text + e.KeyChar;
            maskedTextBox1.Text = a.Substring(1, a.Length - 1);
            maskedTextBox1.SelectionStart = maskedTextBox1.Mask.Length + 1;
        }
    }

    private void maskedTextBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Back)
        {
            maskedTextBox1.Text = "_" + maskedTextBox1.Text;
            maskedTextBox1.SelectionStart = maskedTextBox1.Mask.Length + 1;
        } 
    }
于 2014-04-29T13:52:04.663 回答