【问题标题】:C# add avatar to RichTextBoxC# 将头像添加到 RichTextBox
【发布时间】:2018-01-08 09:52:14
【问题描述】:

我在这里想要完成的是能够添加这样的文本消息:

为了能够制作一个聊天框,我可以说 1000 条消息,就像这样.. 所以我创建了一个自定义 RichTextBox,如下所示:

public class CustomRichTextBox : RichTextBox
    {
        public CustomRichTextBox()
        {

        }
        public static byte[] ImageToByte(Image img)
        {
            ImageConverter converter = new ImageConverter();
            return (byte[])converter.ConvertTo(img, typeof(byte[]));
        }

        public static string ByteArrayToString(byte[] ba)
        {
            StringBuilder hex = new StringBuilder(ba.Length * 2);
            foreach (byte b in ba)
                hex.AppendFormat("{0:x2}", b);
            return hex.ToString();
        }

        public void AddPic(Image img)
        {
            string imgStr = ByteArrayToString(ImageToByte(img));
            string mpic = @"{\pict\pngblip\picw" +
                          img.Width.ToString() + @"\pich" + img.Height.ToString() +
                          @"\picwgoal" + img.Width.ToString() + @"\pichgoal" + img.Height.ToString() +
                          @"\hex " + imgStr + "}";

            Rtf +=  mpic + " Username \r\n Said!...";
        }
    }

但是 RichTextBox 上没有真正显示,我在这里缺少什么!?我只是想让它显示头像和旁边的一段,稍后我将更改font/color etc

【问题讨论】:

  • 使用带有 RTB 的 UserControl 和其他一些可以显示图像的控件,如图片框、标签、面板等。 - 请注意,RTB 既没有 Padding 也没有 Paint 事件,因此尝试对其进行子类化效果不好。
  • @TaW 做一个基本的聊天消息不会太多控制吗?
  • 没有。实际上,如果您关心效率,您甚至不应该使用 RTB!而是将所有东西都绘制到面板上!这是最便宜和最灵活的设计。使用一个文本框输入文本并绘制​​所有以前的消息!
  • 或者看here
  • @Taw 我认为附加/编辑文本比重绘整个 panel 以显示 1000 条消息更好/更有效!

标签: c# winforms richtextbox rtf richtext


【解决方案1】:

我认为您的头像图像以及用户名文本框应该是独立于评论/消息内容的控件。应该是这样的:

<StackPanel orientation="horizontal">
    <Image alt="avatar" />
    <StackPanel orientation="vertical">
        <TextBox>Username</TextBox>
        <RichTextBox>Message or Comment</RichTextBox>
    </StackPanel>
</StackPanel>

转换为您选择的布局。

【讨论】:

  • 这是一个 Winforms 问题!
  • @TaW 和?我举了一个例子。我并不是说它是 winforms 标记。我只是想让 OP 了解它的外观。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多