在最后一个空格后替换字符串的结尾

时间:2013-12-17 17:37:35

标签: c# string replace textbox

有没有办法可以替换字符串的最后一句话?就像最后一个空格后的最后一个字。并通过发送一些{SPACE}键替换它?我想要做的是将句子的日期时间放在文本框的末尾,将其与右侧对齐

我没有尝试任何代码,因为我甚至无法想到从哪里开始。我对我要做的事情的反对意见就像是Skype的消息吗?日期时间结束。

是否有任何教程可能有人说我应该使用一些列表画品?

这是skypes:

enter image description here

这是我的:

enter image description here

3 个答案:

答案 0 :(得分:0)

您提到替换字符串的最后一个SENTENCE - 以及最后一个WORD。你想做什么?

要替换字符串中的最后一个单词,您可以执行以下操作:

var sentence = "scary solution even WITH a monospaced font";
sentence = sentence.Substring(0, sentence.LastIndexOf(' ')) + " CRAZY";

但是,如果您希望将日期/时间放在相对于某些文本的特定位置,那么添加空格是一种非常糟糕的方法...

答案 1 :(得分:0)

请参阅下面的解决方案。它假定您使用的是多行文本框集 为monospace字体。它使用Composite Formatting来对齐/截断 用户名和消息由多个字符确定 userMaxWidthmsgMaxWidth个字段。这是一个非常笨重的解决方案 消息的长度限制为单行msgMaxWidth个字符。我' d 不推荐这是一个严肃的解决方案。我会改为看一个习惯 控制。

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        static void Main()
        {
            ChatForm chatForm = new ChatForm();
            chatForm.PostMessage("Ash", "test",
                DateTime.Today + new TimeSpan(18, 0, 0));
            chatForm.PostMessage("Bob", "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
                DateTime.Today + new TimeSpan(18, 5, 0));
            Application.Run(chatForm);
        }
    }

    class ChatForm : Form
    {
        public ChatForm()
        {
            InitializeComponent();
        }

        private int userMaxWidth = 8;
        private int msgMaxWidth = 40;

        public void PostMessage(string user, string msg, DateTime time)
        {
            // Truncate user
            if (user.Length > userMaxWidth)
                user = user.Substring(0, userMaxWidth);
            // Trucate msg
            if (msg.Length > msgMaxWidth)
                msg = msg.Substring(0, msgMaxWidth);
            string compositeString = 
                "#{0,-" + userMaxWidth + "}{1,-" + msgMaxWidth + "}{2:HH:mm}";
            string formattedMsg =
                String.Format(compositeString, user, msg, time);

            textBox.AppendText(formattedMsg);
            textBox.AppendText(Environment.NewLine);
            textBox.AppendText(Environment.NewLine);
        }

        private System.Windows.Forms.TextBox textBox;

        private void InitializeComponent()
        {
            this.textBox = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // textBox
            // 
            this.textBox.Dock = System.Windows.Forms.DockStyle.Fill;
            this.textBox.Font = new System.Drawing.Font("Courier New", 8.25F,
                System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.textBox.Location = new System.Drawing.Point(0, 0);
            this.textBox.Multiline = true;
            this.textBox.WordWrap = false;
            this.textBox.Name = "textBox";
            this.textBox.Size = new System.Drawing.Size(500, 200);
            this.textBox.TabIndex = 0;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(500, 200);
            this.Controls.Add(this.textBox);
            this.Name = "ChatForm";
            this.Text = "ChatForm";
            this.ResumeLayout(false);
            this.PerformLayout();
        }
    }
}

Text的{​​{1}}属性如下:

textBox

答案 2 :(得分:0)

您不应该将数据与其他数据混合用于显示目的。

string message = "@Bob This is my message                           18:05";

这不是你能够轻松,干净地实现显示的东西。您应该将这些消息实现为类:

public class Message
{
    public string Username { get; set; }
    public string Message { get; set; }
    public DateTime TimeStamp { get; set; }
}

然后,您将使用自定义UserControl或ItemsControl为此结构化数据定义视图。