有没有办法可以替换字符串的最后一句话?就像最后一个空格后的最后一个字。并通过发送一些{SPACE}键替换它?我想要做的是将句子的日期时间放在文本框的末尾,将其与右侧对齐
我没有尝试任何代码,因为我甚至无法想到从哪里开始。我对我要做的事情的反对意见就像是Skype的消息吗?日期时间结束。
是否有任何教程可能有人说我应该使用一些列表画品?
这是skypes:
这是我的:
答案 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来对齐/截断
用户名和消息由多个字符确定
userMaxWidth
和msgMaxWidth
个字段。这是一个非常笨重的解决方案
消息的长度限制为单行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为此结构化数据定义视图。