C#在文本框中实现从右到左的输入顺序

3
我尝试移动TextBox以更新Rss,但问题是Rss文本既包含希伯来语又包含英语和数字,所以每次到达数字时它就开始变得疯狂 :)
示例Rss =“ * ynet-摘要* Ynet *特朗普访问:美国总统从沙特阿拉伯飞往以色列*在巴特亚姆的口角中杀死一个人四年*泰国:曼谷一家医院爆炸造成24人受伤*数十名囚犯因饥饿罢工并返回监狱*由于特朗普的访问,火车将增加到耶路撒冷并从那里出发*北朝鲜:能够开始大规模生产可达到日本的弹道导弹*黎巴嫩报告:特朗普和埃及总统在未来几周内达成区域和平峰会*报告:自政变以来已有超过100,000名公共部门员工被解雇*预测:与季节正常相比,天气炎热且干燥* NBA惊喜:波士顿在克利夫兰获胜,在系列赛中缩小至2:1”
public void Run_Ynet_Rss()
{
    Ynet_Rss.Text = "";
    foreach (string s in (Rss)
    {
        Ynet_Rss.Text = Ynet_Rss.Text + " * " + s;
    }
    Ynet_Rss.TextAlignment = TextAlignment.Right;
}
public void Update_Ynet_Rss()
{
    if (Ynet_Rss.Text == "")
    {
        Run_Ynet_Rss();
    }
    Ynet_Rss.Text = Ynet_Rss.Text.Substring(1);
    Ynet_Rss.TextAlignment = TextAlignment.Right;
} 

当然,有一个DispatcherTimer会每隔一段时间触发Update_Ynet_Rss函数。

只是一个毫无根据的意见:尝试使用RichTextBox。 - ZloyMakak
1
我怀疑问题出在编码上。希伯来语是Unicode(两个字节),而数字是ASCII(一个字节)。字符/字符串是两个字节的对象,类中有一个私有属性来指示字符是一个字节还是两个字节。RSS函数没有正确处理编码。 - jdweng
1个回答

2

经过一番思考,我找到了问题所在...这里是解决方案:

        public void Update_Ynet_Rss()
    {
        if(Ynet_Rss.Text == "")
        {
            Run_Ynet_Rss();
        }
        // Ynet_Rss.Text = Ynet_Rss.Text.Substring(0, Ynet_Rss.Text.Length-1);
        string s = Ynet_Rss.Text;
       // MessageBox.Show("Index = " + s.IndexOf("מבזקים"));
        if (s[0] >= 'א' && s[0] <= 'ת')
        {
            string tmp = "";
            string tmp2 = "";
            //Ynet_Rss.Text = Cutting(Ynet_Rss.Text, 0, s.IndexOf(" "));
            int EndIndex = -1;
            for (int i = 0; i < s.Length; i++)
            {
                if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
                {
                    EndIndex = i;
                    //MessageBox.Show("EndIndex = " + EndIndex + "s[i] = " + s[i].ToString());
                    break;
                }
            }
            if(EndIndex == -1)
            {
             //   MessageBox.Show("EndIndex = " + EndIndex);
                EndIndex = s.Length;
            }
            //tmp = Ynet_Rss.Text.Substring(Ynet_Rss.Text.IndexOf(" "));
            tmp = Ynet_Rss.Text.Substring(EndIndex);
            tmp2 = Ynet_Rss.Text.Substring(0, EndIndex);
          //  MessageBox.Show("V1 = " + tmp2);
            tmp2 = Ynet_Rss.Text.Substring(0, tmp2.Length-1);
       //     MessageBox.Show("V2 = " + tmp2);
            Ynet_Rss.Text = tmp2 + tmp;
        }
        else
        {
            Ynet_Rss.Text = Ynet_Rss.Text.Substring(1);
        }

           Ynet_Rss.TextAlignment = TextAlignment.Left;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接